我正在使用 Flutter 中的 Just Audio 实现基本版本的音频服务。我已经弄清楚了大部分功能,但我无法弄清楚在洗牌和解洗时如何使 MediaItem 队列与音频播放器的播放列表保持同步。
这是我迄今为止尝试过的:
@override
Future<void> setShuffleMode(AudioServiceShuffleMode shuffleMode) async {
final oldIndices = _player.effectiveIndices!;
switch (shuffleMode) {
case AudioServiceShuffleMode.none:
final list = List.generate(
oldIndices.length, (index) => queue.value![oldIndices[index]]);
queue.add(list);
_player.setShuffleModeEnabled(false);
break;
case AudioServiceShuffleMode.group:
case AudioServiceShuffleMode.all:
_player.setShuffleModeEnabled(true);
_player.shuffle();
final playlist =
oldIndices.map((index) => queue.value![index]).toList();
queue.add(playlist);
break;
}
}
这会在洗牌后更新队列,但不允许它返回。我确信必须有一个简单的解决方案,但我的大脑无法掌握它。官方示例没有演示洗牌。