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

Flutter just_audio重复设置同个资源音频报错求助

解决方案:just_audio重复播放资源报错问题

问题根源是每次调用playSound()时重复执行setAsset()——当音频已加载或正在播放时,再次调用setAsset()会中断当前加载/播放流程,触发Loading interrupted异常。以下是几种实用解决办法:

方法一:复用已加载资源,仅重置播放位置

先判断目标资源是否已加载,若已加载则直接将进度重置到开头播放,避免重复加载:

playSound() async {
  // 检查当前是否已加载目标音频资源
  if (audioPlayer.audioSource != null && 
      (audioPlayer.audioSource as AssetAudioSource).assetPath == assetName) {
    await audioPlayer.seek(Duration.zero);
    await audioPlayer.play();
  } else {
    // 未加载目标资源时,执行加载并播放
    await audioPlayer.setAsset(assetName, preload: true);
    await audioPlayer.play();
  }
}

方法二:播放前先终止当前音频流程

如果不需要复用已加载资源,每次播放前先停止当前播放并清理状态,再重新加载:

playSound() async {
  try {
    await audioPlayer.stop();
    await audioPlayer.setAsset(assetName, preload: true);
    await audioPlayer.play();
  } catch (e) {
    print("播放异常: $e");
  }
}

方法三:提前预加载高频使用的音频

如果该音频需要频繁播放,可在初始化阶段提前完成加载,后续直接调用播放即可:

// 初始化时预加载音频
initAudio() async {
  await audioPlayer.setAsset(assetName, preload: true);
}

// 播放时直接重置进度并启动
playSound() async {
  await audioPlayer.seek(Duration.zero);
  await audioPlayer.play();
}

注意:使用完毕后记得调用audioPlayer.dispose()释放资源,避免内存泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 20:22:43