From bf4cebd19dd12b9a24e72a3224d87785eee3d094 Mon Sep 17 00:00:00 2001 From: orz12 Date: Wed, 6 Nov 2024 08:23:55 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20pip=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/pages/setting/play_setting.dart | 4 +-- lib/pages/video/controller.dart | 2 +- lib/pages/video/view.dart | 29 ++++++++++++++++++--- lib/pages/video/widgets/header_control.dart | 6 ++--- 4 files changed, 31 insertions(+), 10 deletions(-) diff --git a/lib/pages/setting/play_setting.dart b/lib/pages/setting/play_setting.dart index 23201b85f..966faaae7 100644 --- a/lib/pages/setting/play_setting.dart +++ b/lib/pages/setting/play_setting.dart @@ -165,7 +165,7 @@ class _PlaySettingState extends State { ), if (Platform.isAndroid) SetSwitchItem( - title: '后台画中画(暂时无效)', + title: '后台画中画', subTitle: '进入后台时以小窗形式(PiP)播放', leading: const Icon(Icons.picture_in_picture_outlined), setKey: SettingBoxKey.autoPiP, @@ -179,7 +179,7 @@ class _PlaySettingState extends State { }), if (Platform.isAndroid) const SetSwitchItem( - title: '画中画不加载弹幕(暂时无效)', + title: '画中画不加载弹幕', subTitle: '当弹幕开关开启时,小窗屏蔽弹幕以获得较好的体验', leading: Icon(Icons.comments_disabled_outlined), setKey: SettingBoxKey.pipNoDanmaku, diff --git a/lib/pages/video/controller.dart b/lib/pages/video/controller.dart index ccf09779d..5dfdc738f 100644 --- a/lib/pages/video/controller.dart +++ b/lib/pages/video/controller.dart @@ -192,7 +192,7 @@ class VideoDetailController extends GetxController /// 更新画质、音质 /// TODO 继续进度播放 - updatePlayer() { + updatePlayer() async { if (plPlayerController == null) return; isShowCover.value = false; defaultST = plPlayerController!.position.value; diff --git a/lib/pages/video/view.dart b/lib/pages/video/view.dart index 802043c06..5385a7147 100644 --- a/lib/pages/video/view.dart +++ b/lib/pages/video/view.dart @@ -112,6 +112,7 @@ class _VideoDetailPageState extends State appbarStreamListen(); // lifecycleListener(); autoScreen(); + // onUserLeaveHintListener = const MethodChannel("onUserLeaveHint"); // onUserLeaveHintListener.setMethodCallHandler((call) async { // if (call.method == 'onUserLeaveHint') { @@ -145,7 +146,28 @@ class _VideoDetailPageState extends State plPlayerController!.addStatusLister(playerListener); listenFullScreenStatus(); await plPlayerController!.autoEnterFullscreen(); - // autoEnterPip(); + Future.wait([_futureBuilderFuture]).then((result) { + autoEnterPip(); + }); + } + } + + void autoEnterPip() { + String top = Get.currentRoute; + if (autoPiP && (top.startsWith('/video') || top.startsWith('/live'))) { + FlPiP().enable( + ios: FlPiPiOSConfig( + enabledWhenBackground: true, + videoPath: videoDetailController.videoUrl, + audioPath: videoDetailController.audioUrl, + packageName: null), + android: FlPiPAndroidConfig( + enabledWhenBackground: true, + aspectRatio: Rational( + videoDetailController.data.dash!.video!.first.width!, + videoDetailController.data.dash!.video!.first.height!, + ), + )); } } @@ -207,7 +229,7 @@ class _VideoDetailPageState extends State listenFullScreenStatus(); await plPlayerController!.autoEnterFullscreen(); videoDetailController.autoPlay.value = true; - // autoEnterPip(); + autoEnterPip(); } // // 生命周期监听 @@ -404,6 +426,7 @@ class _VideoDetailPageState extends State plPlayerController!.videoController == null ? nil : PLVideoPlayer( + key: Key(heroTag), controller: plPlayerController!, videoIntroController: videoDetailController.videoType == SearchType.video @@ -1130,6 +1153,7 @@ class _VideoDetailPageState extends State () => !videoDetailController.autoPlay.value ? const SizedBox() : PLVideoPlayer( + key: Key(heroTag), controller: plPlayerController!, videoIntroController: videoDetailController.videoType == SearchType.video @@ -1157,7 +1181,6 @@ class _VideoDetailPageState extends State ), ); Widget autoChoose(Widget childWhenDisabled) { - return PiPBuilder(builder: (PiPStatusInfo? statusInfo) { print("PiPStatusInfo${statusInfo?.status}"); switch (statusInfo?.status) { diff --git a/lib/pages/video/widgets/header_control.dart b/lib/pages/video/widgets/header_control.dart index 125b7de2a..09c809c00 100644 --- a/lib/pages/video/widgets/header_control.dart +++ b/lib/pages/video/widgets/header_control.dart @@ -1624,10 +1624,8 @@ class _HeaderControlState extends State { widget.controller!.controls = false; FlPiP().enable( ios: FlPiPiOSConfig( - videoPath: - widget.controller!.dataSource.videoSource ?? "", - audioPath: - widget.controller!.dataSource.audioSource ?? "", + videoPath: widget.videoDetailCtr!.videoUrl, + audioPath: widget.videoDetailCtr!.audioUrl, packageName: null), android: FlPiPAndroidConfig( aspectRatio: Rational(