feat: pause track when seeking forward/back and keep audio session alive when paused/interrupted

This commit is contained in:
Kingkor Roy Tirtho 2022-12-07 12:22:11 +06:00
parent 3ed8b0fda2
commit bc8a04e544
2 changed files with 8 additions and 5 deletions

View File

@ -202,6 +202,7 @@ class Playback extends PersistedChangeNotifier {
if (index < 0 || index > playlist.tracks.length - 1) return;
if (isPlaying || status == PlaybackStatus.playing) await stop();
this.playlist = playlist;
mobileAudioService?.session?.setActive(true);
final played = this.playlist!.tracks[index];
status = PlaybackStatus.loading;
notifyListeners();
@ -320,6 +321,7 @@ class Playback extends PersistedChangeNotifier {
}
Future<void> stop() async {
mobileAudioService?.session?.setActive(false);
await player.stop();
await player.release();
isPlaying = false;
@ -634,6 +636,7 @@ class Playback extends PersistedChangeNotifier {
(playlist!.trackIds.indexOf(track!.id!) + 1).toInt();
// checking if there's any track available forward
if (nextTrackIndex > (playlist?.tracks.length ?? 0) - 1) return;
await pause();
await play(playlist!.tracks.elementAt(nextTrackIndex)).then((_) {
playlist!.tracks[nextTrackIndex] = track!;
});
@ -645,6 +648,7 @@ class Playback extends PersistedChangeNotifier {
(playlist!.trackIds.indexOf(track!.id!) - 1).toInt();
// checking if there's any track available behind
if (prevTrackIndex < 0) return;
await pause();
await play(playlist!.tracks.elementAt(prevTrackIndex)).then((_) {
playlist!.tracks[prevTrackIndex] = track!;
});

View File

@ -18,18 +18,18 @@ class MobileAudioService extends BaseAudioHandler {
}
});
});
final _player = playback.player;
_player.onPlayerStateChanged.listen((state) async {
final player = playback.player;
player.onPlayerStateChanged.listen((state) async {
if (state != PlayerState.completed) {
playbackState.add(await _transformEvent());
}
});
_player.onPositionChanged.listen((pos) async {
player.onPositionChanged.listen((pos) async {
playbackState.add(await _transformEvent());
});
_player.onPlayerComplete.listen((_) {
player.onPlayerComplete.listen((_) {
if (playback.playlist == null && playback.track == null) {
playbackState.add(
PlaybackState(
@ -56,7 +56,6 @@ class MobileAudioService extends BaseAudioHandler {
@override
Future<void> stop() async {
await session?.setActive(true);
await playback.stop();
}