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
相关产品推荐
相关产品推荐

