Flutter项目无法加载.mp3音频文件,求解决方案
修复Flutter音频资源找不到的问题
1. 先把pubspec.yaml的资源配置弄对
这是踩坑最多的地方,Flutter对yaml的缩进要求严格,必须用2个空格(不能用tab)。你的pubspec.yaml里得这么写:
flutter: assets: - assets/audios/Meditation.mp3 # 如果audios文件夹下有多个音频,直接写文件夹路径更方便: # - assets/audios/
注意点:
- 路径必须和实际文件位置完全一致,连大小写都不能错(比如
Meditation.mp3不能写成meditation.mp3,系统大小写敏感) - 缩进一定要对齐,
assets:要在flutter:下面缩进2个空格,每一行资源前面也要缩进2个空格
2. 核对文件路径和代码里的是否一致
先确认项目结构:
- 根目录下有没有
assets/audios这个文件夹? Meditation.mp3是不是真的在这个文件夹里?- 代码里的
musicPath = "assets/audios/Meditation.mp3"和实际路径完全匹配吗?别打错字、漏写文件夹名
3. 清缓存重启项目
有时候缓存会导致资源不加载,按以下步骤操作:
- 停止当前运行的项目
- 执行命令清缓存:
flutter clean - 重新拉取依赖:
flutter pub get - 冷重启项目(别用热重载,热重载不会刷新资源)
4. 修正AudioCache的用法
你的代码里有两处问题:
initState里的player.load()完全没必要,还可能提前触发加载错误- 按钮点击时应该调用
player.play(),loadAsFile()只是把文件加载到缓存,不会播放音乐
修正后的代码片段:
class _MusicPlayerState extends State <MusicPlayer> { AudioCache player = AudioCache(); String musicPath = "assets/audios/Meditation.mp3"; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Flutter Music Player'), ), body: Center( child: ElevatedButton( child: Text('Play Music'), onPressed: () async { // 直接调用play播放音频 await player.play(musicPath); }, ), ), ); } }
5. 检查平台权限(Android/iOS)
如果是真机运行仍报错,需要核对权限:
- Android:打开
AndroidManifest.xml,添加读取存储权限(如果音频存在外部存储):
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
- iOS:打开
Info.plist,添加音频访问描述(苹果要求必须声明权限用途):
<key>NSAppleMusicUsageDescription</key> <string>需要访问音频资源来播放音乐</string>
要是这些步骤都试过还是不行,把你的pubspec.yaml完整内容和错误提示文本贴出来,能更快定位问题。
内容的提问来源于stack exchange,提问作者Nup
相关产品推荐
相关产品推荐

