diff --git a/lib/services/audio_service.dart b/lib/services/audio_service.dart index 8a2bc3b..607601e 100644 --- a/lib/services/audio_service.dart +++ b/lib/services/audio_service.dart @@ -779,7 +779,6 @@ class AudioService extends ChangeNotifier { debugPrint('💾 [AudioService] playback state saved'); } - /// 恢复播放状态 /// 恢复播放状态 Future restorePlaybackState() async { final state = await _db.getPlaybackState(); @@ -803,7 +802,9 @@ class AudioService extends ChangeNotifier { _queue = queue; _currentIndex = state['current_index'] as int; - if (_currentIndex >= _queue.length) _currentIndex = 0; + if (_currentIndex < 0 || _currentIndex >= _queue.length) { + _currentIndex = 0; + } final modeStr = state['play_mode'] as String? ?? 'sequential'; _playMode = modeStr == 'sequential' @@ -813,6 +814,20 @@ class AudioService extends ChangeNotifier { : PlayMode.shuffle; _currentPlaylistId = state['current_playlist_id'] as String?; + // ⭐⭐⭐ 关键修复:重建 _shuffledIndices 和 _shuffledIndex ⭐⭐⭐ + if (_playMode == PlayMode.shuffle) { + _shuffledIndices = List.generate(_queue.length, (i) => i); + _shuffledIndices.shuffle(); + _shuffledIndex = _shuffledIndices.indexOf(_currentIndex); + if (_shuffledIndex == -1) { + _shuffledIndex = 0; + _currentIndex = _shuffledIndices[0]; + } + } else { + _shuffledIndices = List.generate(_queue.length, (i) => i); + _shuffledIndex = _currentIndex; + } + // 保存待恢复的进度 final savedPos = state['position_ms'] as int? ?? 0; _pendingSeekPosition = Duration(milliseconds: savedPos); @@ -821,10 +836,11 @@ class AudioService extends ChangeNotifier { _currentSong = song; _onSongChanged?.call(song); - debugPrint( - '♻️ [AudioService] playback state restored: ${song.title} - ${song.artist}'); + debugPrint('♻️ [AudioService] playback state restored: ' + 'queue=${_queue.length}, index=$_currentIndex, ' + 'song=${song.title}, mode=$_playMode'); - // ⭐ 关键:加载音频但不自动播放 + // ⭐ 加载音频但不自动播放 await _loadRestoredPlayback(); return true;