mirror of
https://github.com/nostrlabs-io/zap-stream-flutter.git
synced 2025-06-15 11:48:21 +00:00
@ -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
|
||||||
|
Reference in New Issue
Block a user