From 7707a7848916e9e60131ca8cd6aff8b8dd16977f Mon Sep 17 00:00:00 2001 From: bggRGjQaUbCoE Date: Sat, 21 Sep 2024 17:22:13 +0800 Subject: [PATCH] mod: video playing logic --- lib/pages/video/detail/view.dart | 11 ++++++++++- lib/plugin/pl_player/controller.dart | 15 ++++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/lib/pages/video/detail/view.dart b/lib/pages/video/detail/view.dart index 9042cd49..6f15a53b 100644 --- a/lib/pages/video/detail/view.dart +++ b/lib/pages/video/detail/view.dart @@ -90,6 +90,7 @@ class _VideoDetailPageState extends State @override void initState() { super.initState(); + PlPlayerController.setPlayCallBack(playCallBack); if (Get.arguments != null && Get.arguments['heroTag'] != null) { heroTag = Get.arguments['heroTag']; } @@ -179,6 +180,10 @@ class _VideoDetailPageState extends State } } + void playCallBack() { + plPlayerController?.play(); + } + // 流 appbarStreamListen() { appbarStream = StreamController(); @@ -236,9 +241,9 @@ class _VideoDetailPageState extends State SmartDialog.showToast('not initialized'); return; } + plPlayerController = videoDetailController.plPlayerController; videoDetailController.isShowCover.value = false; await videoDetailController.playerInit(); - plPlayerController = videoDetailController.plPlayerController; plPlayerController!.addStatusLister(playerListener); listenFullScreenStatus(); await plPlayerController!.autoEnterFullscreen(); @@ -292,6 +297,7 @@ class _VideoDetailPageState extends State void dispose() { if (!Get.previousRoute.startsWith('/video')) { ScreenBrightness().resetScreenBrightness(); + PlPlayerController.setPlayCallBack(null); } appbarStream.close(); floating.dispose(); @@ -307,6 +313,8 @@ class _VideoDetailPageState extends State plPlayerController!.removeStatusLister(playerListener); fullScreenStatusListener.cancel(); plPlayerController!.dispose(); + } else { + PlPlayerController.updatePlayCount(); } videoPlayerServiceHandler.onVideoDetailDispose(); VideoDetailPage.routeObserver.unsubscribe(this); @@ -343,6 +351,7 @@ class _VideoDetailPageState extends State // 返回当前页面时 void didPopNext() async { isShowing = true; + PlPlayerController.setPlayCallBack(playCallBack); if (mounted) { if (videoDetailController.brightness != null) { plPlayerController diff --git a/lib/plugin/pl_player/controller.dart b/lib/plugin/pl_player/controller.dart index 48a280f0..b41fb7d6 100644 --- a/lib/plugin/pl_player/controller.dart +++ b/lib/plugin/pl_player/controller.dart @@ -290,9 +290,18 @@ class PlPlayerController { return _instance != null; } + static void setPlayCallBack(Function? playCallBack) { + _playCallBack = playCallBack; + } + + static Function? _playCallBack; + static Future playIfExists( {bool repeat = false, bool hideControls = true}) async { - await _instance?.play(repeat: repeat, hideControls: hideControls); + // await _instance?.play(repeat: repeat, hideControls: hideControls); + if (_playCallBack != null) { + _playCallBack!(); + } } // try to get PlayerStatus @@ -1370,4 +1379,8 @@ class PlPlayerController { )); _vttSubtitlesIndex.value = index; } + + static void updatePlayCount() { + _instance?._playerCount.value -= 1; + } }