Flutter冥想页面音频播放失败求助(附代码与错误信息)
修复Flutter音频加载异常(Unable to load asset: assets/medAudio.mp3)
一、基础配置排查
检查pubspec.yaml资源配置
确保路径格式和缩进正确(必须是2个空格,作为flutter:的子项):flutter: assets: - assets/medAudio.mp3配置完成后必须执行
flutter pub get并重启项目,热重载不会生效。如果是整个assets文件夹批量配置,写成- assets/即可。核对文件路径与名称
- 文件名大小写完全匹配:Flutter对资源路径大小写敏感(尤其iOS/macOS平台),比如实际文件是
MedAudio.mp3,代码里写medAudio.mp3会直接报错。 - 确认文件确实放在项目根目录的
assets文件夹下,不要误放到lib或其他子目录。
- 文件名大小写完全匹配:Flutter对资源路径大小写敏感(尤其iOS/macOS平台),比如实际文件是
二、代码逻辑修正
如果使用audioplayers插件,确保加载和播放逻辑正确(以最新版本为例):
import 'package:audioplayers/audioplayers.dart'; final AudioPlayer _audioPlayer = AudioPlayer(); // Start按钮点击回调 void startMeditation() async { // 启动计时器的逻辑... // 加载并播放音频 try { await _audioPlayer.play(AssetSource('medAudio.mp3')); } catch (e) { print('播放失败: $e'); } }
旧版本audioplayers可能用AudioCache,但新版本推荐使用AssetSource,兼容性更好。
三、常见坑点解决
- 清理缓存重启
执行flutter clean,再运行flutter pub get,最后重新启动项目,避免旧缓存导致的配置不生效。 - iOS平台额外配置
如果需要后台播放音频,在ios/Runner/Info.plist中添加权限:<key>UIBackgroundModes</key> <array> <string>audio</string> </array> - Android平台检查
本地音频无需额外权限,但如果是在线音频,需在android/app/src/main/AndroidManifest.xml中添加网络权限:<uses-permission android:name="android.permission.INTERNET" />
四、替代实现方案
如果上述方法无效,可以尝试以下方案:
- 切换
just_audio插件
这是另一个稳定的音频播放库,配置更简洁:
pubspec.yaml添加依赖:import 'package:just_audio/just_audio.dart'; final AudioPlayer _player = AudioPlayer(); void startMeditation() async { // 计时器逻辑... await _player.setAsset('assets/medAudio.mp3'); await _player.play(); }dependencies: just_audio: ^0.9.34 - 字节流直接加载
绕过资源路径读取,直接加载文件字节:import 'package:flutter/services.dart'; import 'package:audioplayers/audioplayers.dart'; void startMeditation() async { final ByteData data = await rootBundle.load('assets/medAudio.mp3'); await _audioPlayer.play(BytesSource(data.buffer.asUint8List())); }
内容的提问来源于stack exchange,提问作者Tahmeed Zamindar
相关产品推荐
相关产品推荐

