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

使用Flutter audioplayers:^2.0.0遇资源加载错误,求解决方案

解决audioplayers 2.0.0加载音频资产的异常问题

你遇到的这个异常,核心原因是混淆了AudioCache加载后的本地缓存路径和setSourceAsset的使用场景——setSourceAsset是用来加载打包在App里的原始资产文件的,而AudioCache.load()返回的是缓存到本地的文件路径,不能用setSourceAsset来加载它。

下面给你两种可行的解决方案:

方案一:继续使用AudioCache预加载,播放缓存文件

既然你用了AudioCache预加载音频,那应该用setSourceUrl来播放本地缓存的文件,而不是setSourceAsset:

Future setAudio() async {
  AudioPlayer audioPlayer = AudioPlayer();
  audioPlayer.setReleaseMode(ReleaseMode.loop);

  AudioCache audioCache = AudioCache(prefix: 'assets/audio/');

  final url = await audioCache.load('flip.mp3');
  // 改用setSourceUrl加载本地缓存文件路径
  await audioPlayer.setSourceUrl(url.path);
  // 别忘了调用play方法开始播放
  await audioPlayer.play();
}

方案二:直接加载原始资产,无需AudioCache

如果你不需要预加载缓存的话,可以直接用setSourceAsset加载pubspec中配置的原始音频文件,这样更简单:

Future setAudio() async {
  AudioPlayer audioPlayer = AudioPlayer();
  audioPlayer.setReleaseMode(ReleaseMode.loop);

  // 直接传入资产路径,对应pubspec中配置的assets/audio/下的文件
  await audioPlayer.setSourceAsset('assets/audio/flip.mp3');
  await audioPlayer.play();
}

额外检查事项

  1. 确认pubspec.yaml的缩进正确:Flutter对YAML文件的缩进要求严格,assets必须是flutter:下的子项,缩进2个空格,像你现在的配置是对的,但要确保没有用tab代替空格。
  2. 检查文件路径和大小写:确保项目中确实存在assets/audio/flip.mp3文件,文件名大小写要完全匹配(比如iOS系统对文件名大小写敏感,Flip.mp3和flip.mp3会被视为不同文件)。
  3. 异步操作要加await:所有setSourceXXX和play方法都是异步的,必须用await等待完成,避免出现未处理的异步异常。

内容的提问来源于stack exchange,提问作者Janhwa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:30:43