fix: Properly close player on user switch

This commit is contained in:
PartyDonut 2025-08-14 22:17:42 +02:00
parent fc8a0e153b
commit e4c61aa43d
3 changed files with 9 additions and 5 deletions

View file

@ -12,6 +12,7 @@ import 'package:fladder/providers/api_provider.dart';
import 'package:fladder/providers/service_provider.dart';
import 'package:fladder/providers/shared_provider.dart';
import 'package:fladder/providers/sync_provider.dart';
import 'package:fladder/providers/video_player_provider.dart';
part 'user_provider.g.dart';
@ -171,6 +172,7 @@ class User extends _$User {
}
Future<void> logoutUser() async {
await ref.read(videoPlayerProvider).stop();
if (state == null) return;
userState = null;
}

View file

@ -58,10 +58,7 @@ class _CurrentlyPlayingBarState extends ConsumerState<FloatingPlayerBar> {
}
}
Future<void> stopPlayer() async {
ref.read(mediaPlaybackProvider.notifier).update((state) => state.copyWith(state: VideoPlayerState.disposed));
return ref.read(videoPlayerProvider).stop();
}
Future<void> stopPlayer() async => ref.read(videoPlayerProvider).stop();
@override
Widget build(BuildContext context) {

View file

@ -11,6 +11,7 @@ import 'package:wakelock_plus/wakelock_plus.dart';
import 'package:fladder/models/item_base_model.dart';
import 'package:fladder/models/items/media_streams_model.dart';
import 'package:fladder/models/media_playback_model.dart';
import 'package:fladder/models/playback/playback_model.dart';
import 'package:fladder/models/settings/video_player_settings.dart';
import 'package:fladder/providers/settings/client_settings_provider.dart';
@ -237,6 +238,10 @@ class MediaControlsWrapper extends BaseAudioHandler {
@override
Future<void> stop() async {
final playbackModel = ref.read(playBackModel);
if (playbackModel == null) return;
ref.read(mediaPlaybackProvider.notifier).update((state) => state.copyWith(state: VideoPlayerState.disposed));
WakelockPlus.disable();
super.stop();
_player?.stop();
@ -247,7 +252,7 @@ class MediaControlsWrapper extends BaseAudioHandler {
// //Small delay so we don't post right after playback/progress update
await Future.delayed(const Duration(seconds: 1));
await ref.read(playBackModel)?.playbackStopped(position ?? Duration.zero, totalDuration, ref);
await playbackModel.playbackStopped(position ?? Duration.zero, totalDuration, ref);
ref.read(mediaPlaybackProvider.notifier).update((state) => state.copyWith(position: Duration.zero));
smtc?.setPlaybackStatus(PlaybackStatus.stopped);