From 27e8acbfe75a37c0a8fa69a444fdd86e92dbe4f0 Mon Sep 17 00:00:00 2001 From: Kingkor Roy Tirtho Date: Thu, 1 Jun 2023 09:02:44 +0600 Subject: [PATCH] fix: playback not moving to next track after a track ends --- lib/provider/proxy_playlist/proxy_playlist.dart | 2 +- lib/provider/proxy_playlist/proxy_playlist_provider.dart | 7 +++++-- lib/services/audio_player/mk_state_player.dart | 8 ++++++-- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/lib/provider/proxy_playlist/proxy_playlist.dart b/lib/provider/proxy_playlist/proxy_playlist.dart index 3dc1bb56..287a4322 100644 --- a/lib/provider/proxy_playlist/proxy_playlist.dart +++ b/lib/provider/proxy_playlist/proxy_playlist.dart @@ -14,7 +14,7 @@ class ProxyPlaylist { List.castFrom>( json['tracks'] ?? >[], ).map(_makeAppropriateTrack).toSet(), - json['active'] as int, + json['active'] as int?, ); } diff --git a/lib/provider/proxy_playlist/proxy_playlist_provider.dart b/lib/provider/proxy_playlist/proxy_playlist_provider.dart index 84b4ff33..3f69c45e 100644 --- a/lib/provider/proxy_playlist/proxy_playlist_provider.dart +++ b/lib/provider/proxy_playlist/proxy_playlist_provider.dart @@ -1,5 +1,4 @@ import 'dart:async'; -import 'dart:convert'; import 'package:collection/collection.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; @@ -214,7 +213,9 @@ class ProxyPlaylistNotifier extends PersistedStateNotifier }) async { tracks = blacklist.filter(tracks).toList() as List; final addableTrack = await SpotubeTrack.fetchFromTrack( - tracks.elementAt(initialIndex), preferences); + tracks.elementAt(initialIndex), + preferences, + ); state = state.copyWith( tracks: mergeTracks([addableTrack], tracks), @@ -389,6 +390,8 @@ class ProxyPlaylistNotifier extends PersistedStateNotifier @override onInit() { + if (state.tracks.isEmpty) return null; + return load( state.tracks, initialIndex: state.active ?? 0, diff --git a/lib/services/audio_player/mk_state_player.dart b/lib/services/audio_player/mk_state_player.dart index 51026b7f..8f909743 100644 --- a/lib/services/audio_player/mk_state_player.dart +++ b/lib/services/audio_player/mk_state_player.dart @@ -40,9 +40,13 @@ class MkPlayerWithState extends Player { _playerStateStream.add(AudioPlaybackState.paused); } }), - streams.completed.listen((event) async { + streams.position.listen((position) async { + final isComplete = state.duration != Duration.zero && + position != Duration.zero && + state.duration.inSeconds == position.inSeconds; + + if (!isComplete || _playlist == null) return; _playerStateStream.add(AudioPlaybackState.completed); - if (!event || _playlist == null) return; if (loopMode == PlaylistMode.single) { await super.open(_playlist!.medias[_playlist!.index], play: true);