Flutter audioplayers如何依次播放音频列表(前一个结束后播放下一个)
解决audioplayers依次播放音频的问题
你的代码之所以会同时播放所有音频,是因为循环里直接连续调用_play,没有等待每个音频播放完成,而且每次调用都销毁重建AudioPlayer,导致多个实例同时工作。要实现依次播放,只需要复用同一个播放器实例,并等待当前音频播放完成后再启动下一个。
修改后的代码示例:
AudioPlayer _player = AudioPlayer(); // 复用同一个播放器实例 // 播放单个音频,返回Future直到播放完成 Future<void> _play(int number) async { // 先停止当前可能正在播放的音频 await _player.stop(); print("trying to play number $number"); // 开始播放音频 await _player.play(AssetSource('audio/$number.wav')); // 等待播放完成事件触发 await _player.onPlayerComplete.first; } // 依次播放列表中的音频 void _playList(List<int> list) async { for (int audioNum in list) { await _play(audioNum); // 等待当前音频播放完毕再执行下一次循环 } // 所有音频播放完成后,可选择销毁播放器(如果后续不再使用) // await _player.dispose(); }
关键改动说明:
- 复用播放器实例:不再每次销毁重建
AudioPlayer,避免多实例同时播放。 - 等待播放完成:通过
await _player.onPlayerComplete.first监听当前音频的播放完成事件,确保只有当前音频播放完才会进入下一次循环。 - 异步等待循环:在
_playList中用await调用_play,让循环逐个执行,而非一次性触发所有播放。
如果需要处理播放异常(比如音频文件不存在),可以在_play方法中添加try-catch块捕获错误。
内容的提问来源于stack exchange,提问作者Kaidi G
相关产品推荐
相关产品推荐

