From c16106d676bb33cc0af72a7c36872206bc36009a Mon Sep 17 00:00:00 2001 From: guozhigq Date: Sat, 9 Sep 2023 23:52:13 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=87=AA=E5=8A=A8=E5=85=A8=E5=B1=8F?= =?UTF-8?q?=E6=97=B6headerControl=E4=B8=A2=E5=A4=B1=20issues=20#79?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/pages/video/detail/controller.dart | 19 +++++++++++++++++++ lib/pages/video/detail/view.dart | 20 ++++++-------------- lib/plugin/pl_player/view.dart | 4 ++-- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/lib/pages/video/detail/controller.dart b/lib/pages/video/detail/controller.dart index b4dc9ae8..014c7301 100644 --- a/lib/pages/video/detail/controller.dart +++ b/lib/pages/video/detail/controller.dart @@ -1,4 +1,6 @@ import 'dart:async'; +import 'dart:io'; +import 'package:floating/floating.dart'; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; @@ -16,6 +18,8 @@ import 'package:pilipala/utils/storage.dart'; import 'package:pilipala/utils/utils.dart'; import 'package:screen_brightness/screen_brightness.dart'; +import 'widgets/header_control.dart'; + class VideoDetailController extends GetxController with GetSingleTickerProviderStateMixin { /// 路由传参 @@ -76,6 +80,8 @@ class VideoDetailController extends GetxController bool enableHeart = true; var userInfo; late bool isFirstTime = true; + Floating? floating; + late PreferredSizeWidget headerControl; @override void onInit() { @@ -104,6 +110,16 @@ class VideoDetailController extends GetxController enableHeart = false; } danmakuCid.value = cid; + + /// + if (Platform.isAndroid) { + floating = Floating(); + } + headerControl = HeaderControl( + controller: plPlayerController, + videoDetailCtr: this, + floating: floating, + ); } showReplyReplyPanel() { @@ -207,6 +223,9 @@ class VideoDetailController extends GetxController isFirstTime: isFirstTime, autoplay: autoplay, ); + + /// 开启自动全屏时,在player初始化完成后立即传入headerControl + plPlayerController.headerControl = headerControl; } // 视频链接 diff --git a/lib/pages/video/detail/view.dart b/lib/pages/video/detail/view.dart index c147684a..58935b45 100644 --- a/lib/pages/video/detail/view.dart +++ b/lib/pages/video/detail/view.dart @@ -53,7 +53,6 @@ class _VideoDetailPageState extends State late Future _futureBuilderFuture; // 自动退出全屏 late bool autoExitFullcreen; - Floating? floating; @override void initState() { @@ -66,9 +65,6 @@ class _VideoDetailPageState extends State setting.get(SettingBoxKey.enableAutoExit, defaultValue: false); videoSourceInit(); appbarStreamListen(); - if (Platform.isAndroid) { - floating = Floating(); - } } // 获取视频资源,初始化播放器 @@ -100,7 +96,7 @@ class _VideoDetailPageState extends State plPlayerController!.triggerFullScreen(status: false); } // 播放完展示控制栏 - PiPStatus currentStatus = await floating!.pipStatus; + PiPStatus currentStatus = await videoDetailController.floating!.pipStatus; if (currentStatus == PiPStatus.disabled) { plPlayerController!.onLockControl(false); } @@ -128,8 +124,8 @@ class _VideoDetailPageState extends State plPlayerController!.removeStatusLister(playerListener); plPlayerController!.dispose(); } - if (floating != null) { - floating!.dispose(); + if (videoDetailController.floating != null) { + videoDetailController.floating!.dispose(); } super.dispose(); } @@ -219,13 +215,9 @@ class _VideoDetailPageState extends State ? const SizedBox() : PLVideoPlayer( controller: plPlayerController!, - headerControl: HeaderControl( - controller: - plPlayerController, - videoDetailCtr: - videoDetailController, - floating: floating, - ), + headerControl: + videoDetailController + .headerControl, danmuWidget: Obx( () => PlDanmaku( key: Key( diff --git a/lib/plugin/pl_player/view.dart b/lib/plugin/pl_player/view.dart index 302ed095..81e82e74 100644 --- a/lib/plugin/pl_player/view.dart +++ b/lib/plugin/pl_player/view.dart @@ -561,14 +561,14 @@ class _PLVideoPlayerState extends State Obx( () => Column( children: [ - if (widget.headerControl != null) + if (widget.headerControl != null || _.headerControl != null) ClipRect( clipBehavior: Clip.hardEdge, child: AppBarAni( controller: animationController, visible: !_.controlsLock.value && _.showControls.value, position: 'top', - child: widget.headerControl!, + child: widget.headerControl ?? _.headerControl!, ), ), const Spacer(),