From e4c61aa43dbc8b0ffc373d2eb8ae56106a858165 Mon Sep 17 00:00:00 2001 From: PartyDonut Date: Thu, 14 Aug 2025 22:17:42 +0200 Subject: [PATCH] fix: Properly close player on user switch --- lib/providers/user_provider.dart | 2 ++ .../components/floating_player_bar.dart | 5 +---- lib/wrappers/media_control_wrapper.dart | 7 ++++++- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/lib/providers/user_provider.dart b/lib/providers/user_provider.dart index b728c6a..036f91e 100644 --- a/lib/providers/user_provider.dart +++ b/lib/providers/user_provider.dart @@ -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 logoutUser() async { + await ref.read(videoPlayerProvider).stop(); if (state == null) return; userState = null; } diff --git a/lib/widgets/navigation_scaffold/components/floating_player_bar.dart b/lib/widgets/navigation_scaffold/components/floating_player_bar.dart index 82f23ff..a473529 100644 --- a/lib/widgets/navigation_scaffold/components/floating_player_bar.dart +++ b/lib/widgets/navigation_scaffold/components/floating_player_bar.dart @@ -58,10 +58,7 @@ class _CurrentlyPlayingBarState extends ConsumerState { } } - Future stopPlayer() async { - ref.read(mediaPlaybackProvider.notifier).update((state) => state.copyWith(state: VideoPlayerState.disposed)); - return ref.read(videoPlayerProvider).stop(); - } + Future stopPlayer() async => ref.read(videoPlayerProvider).stop(); @override Widget build(BuildContext context) { diff --git a/lib/wrappers/media_control_wrapper.dart b/lib/wrappers/media_control_wrapper.dart index cb3d2f4..ae36272 100644 --- a/lib/wrappers/media_control_wrapper.dart +++ b/lib/wrappers/media_control_wrapper.dart @@ -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 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);