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

修改just_audio:LoopMode.one下seekToNext跳转至下一曲

解决just_audio中LoopMode.one下手动切歌失效的问题

我需要修改just_audio的行为:当LoopMode设为LoopMode.one时,手动点击下一曲按钮(调用seekToNext)要跳转到播放列表的下一首,但曲目自然播放结束时仍保持单曲循环(和Spotify等主流应用逻辑一致)。尝试通过点击按钮时临时关闭LoopMode.one的方式实现,但按钮失效了,附上我的代码:

StreamBuilder<SequenceState?>(
  stream: player.sequenceStateStream,
  builder: (context, snapshot) => IconButton(
      icon: Icon(Icons.skip_previous),
      iconSize: 50.0,
      onPressed:
          // default code
          // player.hasNext ? player.seekToNext : null,
          //  modified code below not working
          () {
        if (player.loopMode == LoopMode.off ||
            player.loopMode == LoopMode.all) {
          player.hasNext ? player.seekToNext : null;
        } else if (player.loopMode == LoopMode.one) {
          player.setLoopMode(LoopMode.off);
          player.hasNext ? player.seekToNext : null;
          player.setLoopMode(LoopMode.one);
        }
      }),
),

问题原因

  • 方法调用错误:player.seekToNext只是方法引用,没有加括号执行,所以实际没触发切歌操作,应该写成player.seekToNext()。
  • 异步顺序冲突:连续同步调用setLoopMode和seekToNext会导致逻辑混乱,just_audio的操作是异步的,切歌还没完成就恢复LoopMode.one,可能打断切歌流程。

修复方案

修复方法调用,并通过async/await确保操作顺序,代码如下:

StreamBuilder<SequenceState?>(
  stream: player.sequenceStateStream,
  builder: (context, snapshot) => IconButton(
    icon: const Icon(Icons.skip_previous),
    iconSize: 50.0,
    onPressed: () async {
      if (!player.hasNext) return; // 无下一曲时直接返回

      if (player.loopMode == LoopMode.one) {
        // 临时关闭单曲循环
        await player.setLoopMode(LoopMode.off);
        // 执行切歌操作
        await player.seekToNext();
        // 恢复单曲循环模式
        await player.setLoopMode(LoopMode.one);
      } else {
        // 其他循环模式直接切歌
        await player.seekToNext();
      }
    },
  ),
),

说明

  • 先判断player.hasNext,避免无效操作。
  • 用async/await保证每一步异步操作完成后再执行下一步,解决顺序冲突问题。
  • 修改后,手动点击切歌会跳转到下一首;曲目自然播放结束时,因LoopMode.one仍生效,会自动重复当前曲目,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 09:45:34