Just Audio Flutter Plugin如何捕获播放列表的歌曲完成事件
just_audio 播放列表单首曲目播放完成事件获取方案
just_audio 原生支持两种方式捕获单首曲目播放完成的触发时机,可直接基于现有流监听实现,无需额外扩展:
方案1:监听currentIndex流(最简实现)
当你通过ConcatenatingAudioSource构建播放列表时,播放器的currentIndex会在曲目切换时自动更新,无论是播放完成自动切歌还是手动切歌都会触发该流,适合不需要区分切歌来源的场景:
- 示例代码:
// 播放器初始化完成后添加监听 _player.currentIndexStream.listen((newIndex) { if (newIndex == null) return; // 此处触发切歌逻辑,newIndex为当前播放的最新曲目索引 // 直接在该回调内更新UI、展示当前播放歌曲即可 });
方案2:结合processingState流监听(可区分自动/手动切歌)
如果你需要严格判定触发来源是「单首播放完成自动切歌」而非用户手动切歌,可以组合监听播放状态流:
- 示例代码:
int? lastCompletedIndex; // 监听播放状态 _player.processingStateStream.listen((state) { if (state == ProcessingState.completed) { // 记录播放完成的上一首曲目索引 lastCompletedIndex = _player.currentIndex; } }); // 结合索引变化判断切歌来源 _player.currentIndexStream.listen((newIndex) { if (newIndex == null || lastCompletedIndex == null) return; // 判定为上一首播放完成自动切到下一首 if (newIndex == lastCompletedIndex! + 1) { // 执行UI更新逻辑 lastCompletedIndex = null; } });
注意:如果是播放列表最后一首播放完成,
processingState会停留在completed状态,不会触发后续的currentIndex更新,可根据业务需求单独处理该场景。
内容的提问来源于stack exchange,提问作者Manish Buttan
相关产品推荐
相关产品推荐

