Skip to content

Commit

Permalink
fix: playback not moving to next track after a track ends
Browse files Browse the repository at this point in the history
  • Loading branch information
KRTirtho committed Jun 1, 2023
1 parent 19d0ddc commit 27e8acb
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 5 deletions.
2 changes: 1 addition & 1 deletion lib/provider/proxy_playlist/proxy_playlist.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class ProxyPlaylist {
List.castFrom<dynamic, Map<String, dynamic>>(
json['tracks'] ?? <Map<String, dynamic>>[],
).map(_makeAppropriateTrack).toSet(),
json['active'] as int,
json['active'] as int?,
);
}

Expand Down
7 changes: 5 additions & 2 deletions lib/provider/proxy_playlist/proxy_playlist_provider.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import 'dart:async';
import 'dart:convert';

import 'package:collection/collection.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
Expand Down Expand Up @@ -214,7 +213,9 @@ class ProxyPlaylistNotifier extends PersistedStateNotifier<ProxyPlaylist>
}) async {
tracks = blacklist.filter(tracks).toList() as List<Track>;
final addableTrack = await SpotubeTrack.fetchFromTrack(
tracks.elementAt(initialIndex), preferences);
tracks.elementAt(initialIndex),
preferences,
);

state = state.copyWith(
tracks: mergeTracks([addableTrack], tracks),
Expand Down Expand Up @@ -389,6 +390,8 @@ class ProxyPlaylistNotifier extends PersistedStateNotifier<ProxyPlaylist>

@override
onInit() {
if (state.tracks.isEmpty) return null;

return load(
state.tracks,
initialIndex: state.active ?? 0,
Expand Down
8 changes: 6 additions & 2 deletions lib/services/audio_player/mk_state_player.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 27e8acb

Please sign in to comment.