72 lines
2.0 KiB
Dart
72 lines
2.0 KiB
Dart
// 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 分离
|
|
// lib/audio/playback_state_manager.dart
|
|
audio_service.PlaybackState get playbackState {
|
|
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(),
|
|
);
|
|
}
|
|
|
|
// ---- 状态更新方法保持不变 ----
|
|
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;
|
|
}
|
|
}
|