fix: stop player while detached

closes #51
This commit is contained in:
2025-06-03 15:24:27 +01:00
parent 97a6708ae2
commit ef1c03d8d5

View File

@ -28,10 +28,44 @@ class PlayerState {
} }
class MainPlayer extends BaseAudioHandler { class MainPlayer extends BaseAudioHandler {
String? _url;
VideoPlayerController? _controller; VideoPlayerController? _controller;
ChewieController? _chewieController; ChewieController? _chewieController;
ValueNotifier<PlayerState?> state = ValueNotifier(null); ValueNotifier<PlayerState?> 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<void> dispose() async {
await super.stop();
await _controller?.dispose();
_chewieController!.dispose();
_controller = null;
_chewieController = null;
state.value = null;
}
ChewieController? get chewie { ChewieController? get chewie {
return _chewieController; return _chewieController;
} }
@ -48,7 +82,7 @@ class MainPlayer extends BaseAudioHandler {
@override @override
Future<void> stop() async { Future<void> stop() async {
await _chewieController?.pause(); await dispose();
} }
Future<void> loadUrl( Future<void> loadUrl(
@ -105,6 +139,7 @@ class MainPlayer extends BaseAudioHandler {
: null, : null,
), ),
); );
_url = url;
} catch (e) { } catch (e) {
if (e is PlatformException && e.code == "VideoError") { if (e is PlatformException && e.code == "VideoError") {
state.value = PlayerState( state.value = PlayerState(
@ -133,6 +168,7 @@ class MainPlayer extends BaseAudioHandler {
MediaControl.stop, MediaControl.stop,
], ],
playing: isPlaying, playing: isPlaying,
androidCompactActionIndices: [1],
processingState: switch (_chewieController processingState: switch (_chewieController
?.videoPlayerController ?.videoPlayerController
.value .value