You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 18:45:28