From ef1c03d8d575893fc8b040e4649311a6e4838f01 Mon Sep 17 00:00:00 2001 From: Kieran Date: Tue, 3 Jun 2025 15:24:27 +0100 Subject: [PATCH] fix: stop player while detached closes #51 --- lib/player.dart | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/lib/player.dart b/lib/player.dart index d05df3e..15ee90c 100644 --- a/lib/player.dart +++ b/lib/player.dart @@ -28,10 +28,44 @@ class PlayerState { } class MainPlayer extends BaseAudioHandler { + String? _url; VideoPlayerController? _controller; ChewieController? _chewieController; ValueNotifier state = ValueNotifier(null); + MainPlayer() { + AppLifecycleListener(onStateChange: _onStateChanged); + } + + void _onStateChanged(AppLifecycleState state) async { + developer.log(state.name); + switch (state) { + case AppLifecycleState.detached: + { + await dispose(); + break; + } + case AppLifecycleState.resumed: + { + if (_controller == null && _url != null) { + await loadUrl(_url!); + } + break; + } + default: + {} + } + } + + Future dispose() async { + await super.stop(); + await _controller?.dispose(); + _chewieController!.dispose(); + _controller = null; + _chewieController = null; + state.value = null; + } + ChewieController? get chewie { return _chewieController; } @@ -48,7 +82,7 @@ class MainPlayer extends BaseAudioHandler { @override Future stop() async { - await _chewieController?.pause(); + await dispose(); } Future loadUrl( @@ -105,6 +139,7 @@ class MainPlayer extends BaseAudioHandler { : null, ), ); + _url = url; } catch (e) { if (e is PlatformException && e.code == "VideoError") { state.value = PlayerState( @@ -133,6 +168,7 @@ class MainPlayer extends BaseAudioHandler { MediaControl.stop, ], playing: isPlaying, + androidCompactActionIndices: [1], processingState: switch (_chewieController ?.videoPlayerController .value