From bb66ab6526c9d0708cb93c5c186be2d3e8cef4f8 Mon Sep 17 00:00:00 2001 From: edde746 <86283021+edde746@users.noreply.github.com> Date: Sat, 9 May 2026 11:10:49 +0200 Subject: [PATCH] fix(player): sync restored volume state --- lib/mpv/player/platform/player_android.dart | 1 + lib/mpv/player/player_base.dart | 11 ++++++++--- lib/mpv/player/player_native.dart | 1 + lib/screens/video_player_screen.dart | 2 +- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/lib/mpv/player/platform/player_android.dart b/lib/mpv/player/platform/player_android.dart index bb0fc85a..f4d844ac 100644 --- a/lib/mpv/player/platform/player_android.dart +++ b/lib/mpv/player/platform/player_android.dart @@ -159,6 +159,7 @@ class PlayerAndroid extends PlayerBase { @override Future setVolume(double volume) async { await invoke('setVolume', {'volume': volume}); + if (!disposed) setVolumeState(volume); } @override diff --git a/lib/mpv/player/player_base.dart b/lib/mpv/player/player_base.dart index 584b25e9..06a5df51 100644 --- a/lib/mpv/player/player_base.dart +++ b/lib/mpv/player/player_base.dart @@ -190,9 +190,7 @@ abstract class PlayerBase with PlayerStreamControllersMixin implements Player { case 'volume': if (value is num) { - final volume = value.toDouble(); - _state = _state.copyWith(volume: volume); - volumeController.add(volume); + setVolumeState(value.toDouble()); } break; @@ -477,6 +475,13 @@ abstract class PlayerBase with PlayerStreamControllersMixin implements Player { tracksController.add(empty); } + @protected + void setVolumeState(double volume) { + if (_state.volume == volume) return; + _state = _state.copyWith(volume: volume); + volumeController.add(volume); + } + @protected void setSeekable(bool seekable) { if (_state.seekable == seekable) return; diff --git a/lib/mpv/player/player_native.dart b/lib/mpv/player/player_native.dart index 8420e1ad..ceac4209 100644 --- a/lib/mpv/player/player_native.dart +++ b/lib/mpv/player/player_native.dart @@ -187,6 +187,7 @@ class PlayerNative extends PlayerBase { @override Future setVolume(double volume) async { await setProperty('volume', volume.toString()); + if (!disposed) setVolumeState(volume); } @override diff --git a/lib/screens/video_player_screen.dart b/lib/screens/video_player_screen.dart index 6e2d5979..202e0281 100644 --- a/lib/screens/video_player_screen.dart +++ b/lib/screens/video_player_screen.dart @@ -719,7 +719,7 @@ class VideoPlayerScreenState extends State with WidgetsBindin await player!.setProperty('volume-max', maxVolume.toString()); final savedVolume = settingsService.read(SettingsService.volume).clamp(0.0, maxVolume.toDouble()); - unawaited(player!.setVolume(savedVolume)); + await player!.setVolume(savedVolume); if (mounted) { setState(() {