fix: 自动全屏时headerControl丢失 issues #79

This commit is contained in:
guozhigq
2023-09-09 23:52:13 +08:00
parent 0e39453558
commit c16106d676
3 changed files with 27 additions and 16 deletions

View File

@ -1,4 +1,6 @@
import 'dart:async'; import 'dart:async';
import 'dart:io';
import 'package:floating/floating.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
@ -16,6 +18,8 @@ import 'package:pilipala/utils/storage.dart';
import 'package:pilipala/utils/utils.dart'; import 'package:pilipala/utils/utils.dart';
import 'package:screen_brightness/screen_brightness.dart'; import 'package:screen_brightness/screen_brightness.dart';
import 'widgets/header_control.dart';
class VideoDetailController extends GetxController class VideoDetailController extends GetxController
with GetSingleTickerProviderStateMixin { with GetSingleTickerProviderStateMixin {
/// 路由传参 /// 路由传参
@ -76,6 +80,8 @@ class VideoDetailController extends GetxController
bool enableHeart = true; bool enableHeart = true;
var userInfo; var userInfo;
late bool isFirstTime = true; late bool isFirstTime = true;
Floating? floating;
late PreferredSizeWidget headerControl;
@override @override
void onInit() { void onInit() {
@ -104,6 +110,16 @@ class VideoDetailController extends GetxController
enableHeart = false; enableHeart = false;
} }
danmakuCid.value = cid; danmakuCid.value = cid;
///
if (Platform.isAndroid) {
floating = Floating();
}
headerControl = HeaderControl(
controller: plPlayerController,
videoDetailCtr: this,
floating: floating,
);
} }
showReplyReplyPanel() { showReplyReplyPanel() {
@ -207,6 +223,9 @@ class VideoDetailController extends GetxController
isFirstTime: isFirstTime, isFirstTime: isFirstTime,
autoplay: autoplay, autoplay: autoplay,
); );
/// 开启自动全屏时在player初始化完成后立即传入headerControl
plPlayerController.headerControl = headerControl;
} }
// 视频链接 // 视频链接

View File

@ -53,7 +53,6 @@ class _VideoDetailPageState extends State<VideoDetailPage>
late Future _futureBuilderFuture; late Future _futureBuilderFuture;
// 自动退出全屏 // 自动退出全屏
late bool autoExitFullcreen; late bool autoExitFullcreen;
Floating? floating;
@override @override
void initState() { void initState() {
@ -66,9 +65,6 @@ class _VideoDetailPageState extends State<VideoDetailPage>
setting.get(SettingBoxKey.enableAutoExit, defaultValue: false); setting.get(SettingBoxKey.enableAutoExit, defaultValue: false);
videoSourceInit(); videoSourceInit();
appbarStreamListen(); appbarStreamListen();
if (Platform.isAndroid) {
floating = Floating();
}
} }
// 获取视频资源,初始化播放器 // 获取视频资源,初始化播放器
@ -100,7 +96,7 @@ class _VideoDetailPageState extends State<VideoDetailPage>
plPlayerController!.triggerFullScreen(status: false); plPlayerController!.triggerFullScreen(status: false);
} }
// 播放完展示控制栏 // 播放完展示控制栏
PiPStatus currentStatus = await floating!.pipStatus; PiPStatus currentStatus = await videoDetailController.floating!.pipStatus;
if (currentStatus == PiPStatus.disabled) { if (currentStatus == PiPStatus.disabled) {
plPlayerController!.onLockControl(false); plPlayerController!.onLockControl(false);
} }
@ -128,8 +124,8 @@ class _VideoDetailPageState extends State<VideoDetailPage>
plPlayerController!.removeStatusLister(playerListener); plPlayerController!.removeStatusLister(playerListener);
plPlayerController!.dispose(); plPlayerController!.dispose();
} }
if (floating != null) { if (videoDetailController.floating != null) {
floating!.dispose(); videoDetailController.floating!.dispose();
} }
super.dispose(); super.dispose();
} }
@ -219,13 +215,9 @@ class _VideoDetailPageState extends State<VideoDetailPage>
? const SizedBox() ? const SizedBox()
: PLVideoPlayer( : PLVideoPlayer(
controller: plPlayerController!, controller: plPlayerController!,
headerControl: HeaderControl( headerControl:
controller: videoDetailController
plPlayerController, .headerControl,
videoDetailCtr:
videoDetailController,
floating: floating,
),
danmuWidget: Obx( danmuWidget: Obx(
() => PlDanmaku( () => PlDanmaku(
key: Key( key: Key(

View File

@ -561,14 +561,14 @@ class _PLVideoPlayerState extends State<PLVideoPlayer>
Obx( Obx(
() => Column( () => Column(
children: [ children: [
if (widget.headerControl != null) if (widget.headerControl != null || _.headerControl != null)
ClipRect( ClipRect(
clipBehavior: Clip.hardEdge, clipBehavior: Clip.hardEdge,
child: AppBarAni( child: AppBarAni(
controller: animationController, controller: animationController,
visible: !_.controlsLock.value && _.showControls.value, visible: !_.controlsLock.value && _.showControls.value,
position: 'top', position: 'top',
child: widget.headerControl!, child: widget.headerControl ?? _.headerControl!,
), ),
), ),
const Spacer(), const Spacer(),