// lib/audio/playback_state_manager.dart import 'package:audio_service/audio_service.dart' as audio_service; class PlaybackStateManager { static final PlaybackStateManager _instance = PlaybackStateManager._internal(); factory PlaybackStateManager() => _instance; PlaybackStateManager._internal(); bool _playing = false; bool get playing => _playing; Duration _position = Duration.zero; Duration get position => _position; Duration _duration = Duration.zero; Duration get duration => _duration; // ⭐ 核心改动:使用 playPause 替代 play/pause 分离 audio_service.PlaybackState get playbackState { // ⭐ 固定使用 playPause,不再动态切换 final playControl = audio_service.MediaControl( androidIcon: _playing ? 'drawable/ic_pause' : 'drawable/ic_play', label: _playing ? '暂停' : '播放', action: audio_service.MediaAction.playPause, // 固定 ); final controls = [ audio_service.MediaControl( androidIcon: 'drawable/ic_previous', label: '上一曲', action: audio_service.MediaAction.skipToPrevious, ), playControl, audio_service.MediaControl( androidIcon: 'drawable/ic_next', label: '下一曲', action: audio_service.MediaAction.skipToNext, ), ]; return audio_service.PlaybackState( controls: controls, processingState: audio_service.AudioProcessingState.ready, playing: _playing, // ⭐ 这里才是真正的播放状态,通知栏会根据它显示正确的图标 androidCompactActionIndices: const [0, 1, 2], updateTime: DateTime.now(), //extras: {'_refresh': DateTime.now().millisecondsSinceEpoch}, ); } // ---- 状态更新方法保持不变 ---- void updatePlaying(bool playing) { if (_playing != playing) { _playing = playing; } } void updatePosition(Duration position) { _position = position; } void updateDuration(Duration duration) { _duration = duration; } void reset() { _playing = false; _position = Duration.zero; _duration = Duration.zero; } }