@@ -110,6 +110,20 @@ class MusifyAudioHandler extends BaseAudioHandler {
110110 prev.queueIndex == curr.queueIndex,
111111 );
112112
113+ static const _playingControls = [
114+ MediaControl .skipToPrevious,
115+ MediaControl .pause,
116+ MediaControl .stop,
117+ MediaControl .skipToNext,
118+ ];
119+
120+ static const _pausedControls = [
121+ MediaControl .skipToPrevious,
122+ MediaControl .play,
123+ MediaControl .stop,
124+ MediaControl .skipToNext,
125+ ];
126+
113127 final processingStateMap = {
114128 ProcessingState .idle: AudioProcessingState .idle,
115129 ProcessingState .loading: AudioProcessingState .loading,
@@ -270,26 +284,27 @@ class MusifyAudioHandler extends BaseAudioHandler {
270284
271285 Future .microtask (() {
272286 try {
287+ final now = DateTime .now ();
288+ final currentPosition = audioPlayer.position;
289+ final isPlaying = audioPlayer.playing;
273290 final currentState = playbackState.valueOrNull;
274291 final newProcessingState =
275292 processingStateMap[audioPlayer.processingState] ??
276293 AudioProcessingState .idle;
277294
278295 var shouldUpdate =
279296 currentState == null ||
280- currentState.playing != audioPlayer.playing ||
297+ currentState.playing != isPlaying ||
281298 currentState.processingState != newProcessingState ||
282299 currentState.queueIndex != _currentQueueIndex;
283300
284301 if (! shouldUpdate) {
285- final currentPosition = audioPlayer.position;
286302 final lastUpdateTime = currentState.updateTime;
287303 final lastUpdatePosition = currentState.updatePosition;
288304 final speed = currentState.speed;
289305
290306 final expectedPosition =
291- lastUpdatePosition +
292- (DateTime .now ().difference (lastUpdateTime)) * speed;
307+ lastUpdatePosition + (now.difference (lastUpdateTime)) * speed;
293308
294309 if ((currentPosition - expectedPosition).abs () >
295310 const Duration (milliseconds: 500 )) {
@@ -300,30 +315,22 @@ class MusifyAudioHandler extends BaseAudioHandler {
300315 if (shouldUpdate) {
301316 playbackState.add (
302317 PlaybackState (
303- controls: [
304- MediaControl .skipToPrevious,
305- if (audioPlayer.playing)
306- MediaControl .pause
307- else
308- MediaControl .play,
309- MediaControl .stop,
310- MediaControl .skipToNext,
311- ],
318+ controls: isPlaying ? _playingControls : _pausedControls,
312319 systemActions: const {
313320 MediaAction .seek,
314321 MediaAction .seekForward,
315322 MediaAction .seekBackward,
316323 },
317324 androidCompactActionIndices: const [0 , 1 , 3 ],
318325 processingState: newProcessingState,
319- playing: audioPlayer.playing ,
320- updatePosition: audioPlayer.position ,
326+ playing: isPlaying ,
327+ updatePosition: currentPosition ,
321328 bufferedPosition: audioPlayer.bufferedPosition,
322329 speed: audioPlayer.speed,
323330 queueIndex: _currentQueueIndex < _queueList.length
324331 ? _currentQueueIndex
325332 : null ,
326- updateTime: DateTime . now () ,
333+ updateTime: now,
327334 ),
328335 );
329336 }
0 commit comments