From fdb817cadde00ba1ecb7b14d908042db9b3a6f64 Mon Sep 17 00:00:00 2001 From: bggRGjQaUbCoE Date: Sun, 8 Jun 2025 11:28:50 +0800 Subject: [PATCH] opt video page Signed-off-by: bggRGjQaUbCoE --- lib/pages/video/view.dart | 856 ++++++++++++++++----------------- lib/plugin/pl_player/view.dart | 5 +- 2 files changed, 417 insertions(+), 444 deletions(-) diff --git a/lib/pages/video/view.dart b/lib/pages/video/view.dart index 29b2ad90..8c1fb664 100644 --- a/lib/pages/video/view.dart +++ b/lib/pages/video/view.dart @@ -487,456 +487,440 @@ class _VideoDetailPageVState extends State } } - Widget get childWhenDisabled => SafeArea( - top: !removeSafeArea && - MediaQuery.of(context).orientation == Orientation.portrait && - isFullScreen, - bottom: !removeSafeArea && - MediaQuery.of(context).orientation == Orientation.portrait && - isFullScreen, - left: false, - right: false, - child: Scaffold( - resizeToAvoidBottomInset: false, - key: videoDetailController.scaffoldKey, - appBar: removeSafeArea - ? null - : PreferredSize( - preferredSize: const Size.fromHeight(0), - child: Obx( - () { - bool shouldShow = - videoDetailController.scrollRatio.value != 0 && - videoDetailController.scrollCtr.offset != 0 && - context.orientation == Orientation.portrait; - return Stack( - clipBehavior: Clip.none, - children: [ - AppBar( - backgroundColor: Colors.black, - toolbarHeight: 0, - systemOverlayStyle: Platform.isAndroid - ? shouldShow - ? null - : SystemUiOverlayStyle( - statusBarIconBrightness: - Brightness.light, - systemNavigationBarIconBrightness: - themeData.brightness.reverse, - ) - : null, - ), - if (shouldShow) - AppBar( - backgroundColor: themeData.colorScheme.surface - .withValues( - alpha: videoDetailController - .scrollRatio.value), - toolbarHeight: 0, - systemOverlayStyle: Platform.isAndroid - ? SystemUiOverlayStyle( - statusBarIconBrightness: - themeData.brightness.reverse, + Widget get childWhenDisabled { + final isPortrait = + MediaQuery.orientationOf(context) == Orientation.portrait; + final useSafeArea = !removeSafeArea && isPortrait && isFullScreen; + final size = MediaQuery.sizeOf(context); + final double width = size.width; + final double height = size.height; + return SafeArea( + top: useSafeArea, + bottom: useSafeArea, + left: false, + right: false, + child: Scaffold( + resizeToAvoidBottomInset: false, + key: videoDetailController.scaffoldKey, + appBar: removeSafeArea + ? null + : PreferredSize( + preferredSize: const Size.fromHeight(0), + child: Obx( + () { + bool shouldShow = + videoDetailController.scrollRatio.value != 0 && + videoDetailController.scrollCtr.offset != 0 && + isPortrait; + return Stack( + clipBehavior: Clip.none, + children: [ + AppBar( + backgroundColor: Colors.black, + toolbarHeight: 0, + systemOverlayStyle: Platform.isAndroid + ? shouldShow + ? null + : SystemUiOverlayStyle( + statusBarIconBrightness: Brightness.light, systemNavigationBarIconBrightness: themeData.brightness.reverse, ) - : null, - ), - ], - ); - }, - ), + : null, + ), + if (shouldShow) + AppBar( + backgroundColor: themeData.colorScheme.surface + .withValues( + alpha: videoDetailController + .scrollRatio.value), + toolbarHeight: 0, + systemOverlayStyle: Platform.isAndroid + ? SystemUiOverlayStyle( + statusBarIconBrightness: + themeData.brightness.reverse, + systemNavigationBarIconBrightness: + themeData.brightness.reverse, + ) + : null, + ), + ], + ); + }, ), - body: ExtendedNestedScrollView( - key: videoDetailController.scrollKey, - physics: const NeverScrollableScrollPhysics( - parent: ClampingScrollPhysics(), - ), - controller: videoDetailController.scrollCtr, - onlyOneScrollInBody: true, - pinnedHeaderSliverHeightBuilder: () { - double height = isFullScreen || - context.orientation == Orientation.landscape - ? MediaQuery.sizeOf(context).height - : videoDetailController.isExpanding || - videoDetailController.isCollapsing - ? animHeight - : videoDetailController.isCollapsing || - plPlayerController?.playerStatus.status.value == - PlayerStatus.playing - ? videoDetailController.minVideoHeight - : kToolbarHeight; - if (videoDetailController.isExpanding && - videoDetailController.animationController.value == 1) { - videoDetailController.isExpanding = false; - WidgetsBinding.instance.addPostFrameCallback((_) { - videoDetailController.scrollRatio.value = 0; - refreshPage(); - }); - } else if (videoDetailController.isCollapsing && - videoDetailController.animationController.value == 1) { - videoDetailController.isCollapsing = false; - WidgetsBinding.instance.addPostFrameCallback((_) { - refreshPage(); - }); - } - return height; - }, - headerSliverBuilder: - (BuildContext context, bool innerBoxIsScrolled) { - return [ - SliverAppBar( - elevation: 0, - scrolledUnderElevation: 0, - primary: false, - automaticallyImplyLeading: false, - pinned: true, - expandedHeight: isFullScreen || - context.orientation == Orientation.landscape - ? MediaQuery.sizeOf(context).height - : videoDetailController.isExpanding || - videoDetailController.isCollapsing - ? animHeight - : videoDetailController.videoHeight, - flexibleSpace: Stack( - clipBehavior: Clip.none, - children: [ - Builder( - builder: (context) { - final double videoWidth = context.width; - if (MediaQuery.of(context).orientation == - Orientation.landscape && - !videoDetailController.horizontalScreen && - !isFullScreen && - isShowing && - mounted) { - hideStatusBar(); + ), + body: ExtendedNestedScrollView( + key: videoDetailController.scrollKey, + physics: const NeverScrollableScrollPhysics( + parent: ClampingScrollPhysics(), + ), + controller: videoDetailController.scrollCtr, + onlyOneScrollInBody: true, + pinnedHeaderSliverHeightBuilder: () { + double pinnedHeight = isFullScreen || !isPortrait + ? height + : videoDetailController.isExpanding || + videoDetailController.isCollapsing + ? animHeight + : videoDetailController.isCollapsing || + plPlayerController?.playerStatus.status.value == + PlayerStatus.playing + ? videoDetailController.minVideoHeight + : kToolbarHeight; + if (videoDetailController.isExpanding && + videoDetailController.animationController.value == 1) { + videoDetailController.isExpanding = false; + WidgetsBinding.instance.addPostFrameCallback((_) { + videoDetailController.scrollRatio.value = 0; + refreshPage(); + }); + } else if (videoDetailController.isCollapsing && + videoDetailController.animationController.value == 1) { + videoDetailController.isCollapsing = false; + WidgetsBinding.instance.addPostFrameCallback((_) { + refreshPage(); + }); + } + return pinnedHeight; + }, + headerSliverBuilder: (context, innerBoxIsScrolled) { + return [ + SliverAppBar( + elevation: 0, + scrolledUnderElevation: 0, + primary: false, + automaticallyImplyLeading: false, + pinned: true, + expandedHeight: isFullScreen || !isPortrait + ? height + : videoDetailController.isExpanding || + videoDetailController.isCollapsing + ? animHeight + : videoDetailController.videoHeight, + flexibleSpace: Stack( + clipBehavior: Clip.none, + children: [ + Builder( + builder: (context) { + if (!isPortrait && + !videoDetailController.horizontalScreen && + !isFullScreen && + isShowing && + mounted) { + hideStatusBar(); + } + if (isPortrait && + !isFullScreen && + isShowing && + mounted) { + if (!videoDetailController.imageStatus && + !removeSafeArea) { + showStatusBar(); } - if (MediaQuery.of(context).orientation == - Orientation.portrait && - !isFullScreen && - isShowing && - mounted) { - if (!videoDetailController.imageStatus && - !removeSafeArea) { - showStatusBar(); - } - } - return SizedBox( - height: MediaQuery.of(context).orientation == - Orientation.landscape || - isFullScreen - ? MediaQuery.sizeOf(context).height - - (MediaQuery.of(context).orientation == - Orientation.landscape || - removeSafeArea - ? 0 - : MediaQuery.of(this.context) - .padding - .top) + } + return SizedBox( + height: !isPortrait || isFullScreen + ? height - + (!isPortrait || removeSafeArea + ? 0 + : MediaQuery.of(this.context).padding.top) + : videoDetailController.isExpanding || + videoDetailController.isCollapsing + ? animHeight + : videoDetailController.videoHeight, + width: width, + child: videoPlayer( + width, + !isPortrait || isFullScreen + ? height : videoDetailController.isExpanding || videoDetailController.isCollapsing ? animHeight : videoDetailController.videoHeight, - width: context.width, - child: videoPlayer( - videoWidth, - context.orientation == Orientation.landscape || - isFullScreen - ? context.height - : videoDetailController.isExpanding || - videoDetailController.isCollapsing - ? animHeight - : videoDetailController.videoHeight, - ), - ); - }, - ), - Obx( - () { - Widget toolbar() => Opacity( - opacity: - videoDetailController.scrollRatio.value, - child: Container( - color: themeData.colorScheme.surface, - alignment: Alignment.topCenter, - child: SizedBox( - height: kToolbarHeight, - child: Stack( - clipBehavior: Clip.none, - children: [ - Align( - alignment: Alignment.centerLeft, - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - SizedBox( - width: 42, - height: 34, - child: IconButton( - tooltip: '返回', - icon: Icon( - FontAwesomeIcons.arrowLeft, - size: 15, - color: themeData - .colorScheme.onSurface, - ), - onPressed: Get.back, + ), + ); + }, + ), + Obx( + () { + Widget toolbar() => Opacity( + opacity: videoDetailController.scrollRatio.value, + child: Container( + color: themeData.colorScheme.surface, + alignment: Alignment.topCenter, + child: SizedBox( + height: kToolbarHeight, + child: Stack( + clipBehavior: Clip.none, + children: [ + Align( + alignment: Alignment.centerLeft, + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + SizedBox( + width: 42, + height: 34, + child: IconButton( + tooltip: '返回', + icon: Icon( + FontAwesomeIcons.arrowLeft, + size: 15, + color: themeData + .colorScheme.onSurface, ), + onPressed: Get.back, ), - SizedBox( - width: 42, - height: 34, - child: IconButton( - tooltip: '返回主页', - icon: Icon( - FontAwesomeIcons.house, - size: 15, - color: themeData - .colorScheme.onSurface, - ), - onPressed: () { - videoDetailController - .plPlayerController - .backToHome = true; - Get.until((route) => - route.isFirst); - }, + ), + SizedBox( + width: 42, + height: 34, + child: IconButton( + tooltip: '返回主页', + icon: Icon( + FontAwesomeIcons.house, + size: 15, + color: themeData + .colorScheme.onSurface, ), + onPressed: () { + videoDetailController + .plPlayerController + .backToHome = true; + Get.until( + (route) => route.isFirst); + }, ), - ], - ), + ), + ], ), - Center( - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - Icon( - Icons.play_arrow_rounded, + ), + Center( + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Icon( + Icons.play_arrow_rounded, + color: + themeData.colorScheme.primary, + ), + Text( + '${videoDetailController.playedTime == null ? '立即' : plPlayerController!.playerStatus.status.value == PlayerStatus.completed ? '重新' : '继续'}播放', + style: TextStyle( color: themeData .colorScheme.primary, ), - Text( - '${videoDetailController.playedTime == null ? '立即' : plPlayerController!.playerStatus.status.value == PlayerStatus.completed ? '重新' : '继续'}播放', - style: TextStyle( - color: themeData - .colorScheme.primary, - ), - ), - ], - ), + ), + ], ), - Align( - alignment: Alignment.centerRight, - child: videoDetailController - .playedTime == - null - ? PopupMenuButton( + ), + Align( + alignment: Alignment.centerRight, + child: videoDetailController + .playedTime == + null + ? PopupMenuButton( + icon: Icon( + size: 22, + Icons.more_vert, + color: themeData + .colorScheme.onSurface, + ), + onSelected: + (String type) async { + switch (type) { + case 'later': + await videoIntroController + .viewLater(); + break; + case 'report': + if (!Accounts + .main.isLogin) { + SmartDialog.showToast( + '账号未登录'); + } else { + PageUtils.reportVideo( + videoDetailController + .oid.value); + } + break; + case 'note': + videoDetailController + .showNoteList( + context); + break; + case 'savePic': + DownloadUtils.downloadImg( + context, + [ + videoDetailController + .videoItem['pic'] + ], + ); + break; + } + }, + itemBuilder: (BuildContext + context) => + >[ + const PopupMenuItem( + value: 'later', + child: Text('稍后再看'), + ), + if (videoDetailController + .epId == + null) + const PopupMenuItem( + value: 'note', + child: Text('查看笔记'), + ), + if (videoDetailController + .videoItem['pic'] != + null) + const PopupMenuItem( + value: 'savePic', + child: Text('保存封面'), + ), + const PopupMenuItem( + value: 'report', + child: Text('举报'), + ), + ], + ) + : SizedBox( + width: 42, + height: 34, + child: IconButton( + tooltip: "更多设置", + style: ButtonStyle( + padding: + WidgetStateProperty.all( + EdgeInsets.zero), + ), + onPressed: () => + videoDetailController + .headerCtrKey + .currentState + ?.showSettingSheet(), icon: Icon( - size: 22, - Icons.more_vert, + Icons.more_vert_outlined, + size: 19, color: themeData .colorScheme.onSurface, ), - onSelected: - (String type) async { - switch (type) { - case 'later': - await videoIntroController - .viewLater(); - break; - case 'report': - if (!Accounts - .main.isLogin) { - SmartDialog.showToast( - '账号未登录'); - } else { - PageUtils.reportVideo( - videoDetailController - .oid.value); - } - break; - case 'note': - videoDetailController - .showNoteList( - context); - break; - case 'savePic': - DownloadUtils - .downloadImg( - context, - [ - videoDetailController - .videoItem[ - 'pic'] - ], - ); - break; - } - }, - itemBuilder: (BuildContext - context) => - >[ - const PopupMenuItem( - value: 'later', - child: Text('稍后再看'), - ), - if (videoDetailController - .epId == - null) - const PopupMenuItem< - String>( - value: 'note', - child: Text('查看笔记'), - ), - if (videoDetailController - .videoItem['pic'] != - null) - const PopupMenuItem< - String>( - value: 'savePic', - child: Text('保存封面'), - ), - const PopupMenuItem( - value: 'report', - child: Text('举报'), - ), - ], - ) - : SizedBox( - width: 42, - height: 34, - child: IconButton( - tooltip: "更多设置", - style: ButtonStyle( - padding: - WidgetStateProperty - .all(EdgeInsets - .zero), - ), - onPressed: () => - videoDetailController - .headerCtrKey - .currentState - ?.showSettingSheet(), - icon: Icon( - Icons.more_vert_outlined, - size: 19, - color: themeData - .colorScheme - .onSurface, - ), - ), ), - ), - ], - ), + ), + ), + ], ), ), - ); - return videoDetailController.scrollRatio.value == 0 || - videoDetailController.scrollCtr.offset == 0 || - context.orientation != Orientation.portrait - ? const SizedBox.shrink() - : Positioned.fill( - bottom: -2, - child: GestureDetector( - onTap: () async { - if (videoDetailController.isQuerying) { - if (kDebugMode) { - debugPrint('handlePlay: querying'); - } - return; + ), + ); + return videoDetailController.scrollRatio.value == 0 || + videoDetailController.scrollCtr.offset == 0 || + !isPortrait + ? const SizedBox.shrink() + : Positioned.fill( + bottom: -2, + child: GestureDetector( + onTap: () async { + if (videoDetailController.isQuerying) { + if (kDebugMode) { + debugPrint('handlePlay: querying'); } - if (videoDetailController.videoUrl == - null || - videoDetailController.audioUrl == - null) { - if (kDebugMode) { - debugPrint( - 'handlePlay: videoUrl/audioUrl not initialized'); - } - videoDetailController.queryVideoUrl(); - return; + return; + } + if (videoDetailController.videoUrl == + null || + videoDetailController.audioUrl == + null) { + if (kDebugMode) { + debugPrint( + 'handlePlay: videoUrl/audioUrl not initialized'); } - videoDetailController.scrollRatio.value = - 0; - if (plPlayerController == null || - videoDetailController.playedTime == - null) { - handlePlay(); - } else { - if (plPlayerController! + videoDetailController.queryVideoUrl(); + return; + } + videoDetailController.scrollRatio.value = 0; + if (plPlayerController == null || + videoDetailController.playedTime == + null) { + handlePlay(); + } else { + if (plPlayerController! + .videoPlayerController! + .state + .completed) { + await plPlayerController! .videoPlayerController! - .state - .completed) { - await plPlayerController! - .videoPlayerController! - .seek(Duration.zero); - plPlayerController! - .videoPlayerController! - .play(); - } else { - plPlayerController! - .videoPlayerController! - .playOrPause(); - } + .seek(Duration.zero); + plPlayerController! + .videoPlayerController! + .play(); + } else { + plPlayerController! + .videoPlayerController! + .playOrPause(); } - }, - behavior: HitTestBehavior.opaque, - child: toolbar(), - ), - ); - }, - ), + } + }, + behavior: HitTestBehavior.opaque, + child: toolbar(), + ), + ); + }, + ), + ], + ), + ), + ]; + }, + body: Scaffold( + key: videoDetailController.childKey, + resizeToAvoidBottomInset: false, + backgroundColor: Colors.transparent, + body: Column( + children: [ + buildTabbar( + showReply: videoDetailController.showReply, + onTap: videoDetailController.animToTop, + ), + Expanded( + child: videoTabBarView( + controller: videoDetailController.tabCtr, + children: [ + videoIntro(true, false), + if (videoDetailController.showReply) + videoReplyPanel(false), + if (_shouldShowSeasonPanel) seasonPanel, ], ), ), - ]; - }, - body: Scaffold( - key: videoDetailController.childKey, - resizeToAvoidBottomInset: false, - backgroundColor: Colors.transparent, - body: Column( - children: [ - buildTabbar( - showReply: videoDetailController.showReply, - onTap: videoDetailController.animToTop, - ), - Expanded( - child: videoTabBarView( - controller: videoDetailController.tabCtr, - children: [ - videoIntro(true, false), - if (videoDetailController.showReply) - videoReplyPanel(false), - if (_shouldShowSeasonPanel) seasonPanel, - ], - ), - ), - ], - ), + ], ), ), ), - ); + ), + ); + } Widget get childWhenDisabledAlmostSquareInner => Obx( () { + final size = MediaQuery.sizeOf(context); + final double width = size.width; + final double height = size.height; + final padding = MediaQuery.paddingOf(context); if (enableVerticalExpand && videoDetailController.direction.value == 'vertical') { - final double videoHeight = context.height - - (removeSafeArea - ? 0 - : (MediaQuery.of(context).padding.top + - MediaQuery.of(context).padding.bottom)); + final double videoHeight = + height - (removeSafeArea ? 0 : padding.vertical); final double videoWidth = videoHeight * 9 / 16; return Row( + crossAxisAlignment: CrossAxisAlignment.start, children: [ SizedBox( height: videoHeight, - width: isFullScreen ? context.width : videoWidth, + width: isFullScreen ? width : videoWidth, child: videoPlayer(videoWidth, videoHeight), ), Expanded( @@ -965,20 +949,15 @@ class _VideoDetailPageVState extends State ], ); } - final double videoHeight = context.height / 2.5; - final double videoWidth = context.width; + final double videoHeight = height / 2.5; return Column( children: [ SizedBox( - width: videoWidth, + width: width, height: isFullScreen - ? context.height - - (removeSafeArea - ? 0 - : (MediaQuery.of(context).padding.top + - MediaQuery.of(context).padding.bottom)) + ? height - (removeSafeArea ? 0 : padding.vertical) : videoHeight, - child: videoPlayer(videoWidth, videoHeight), + child: videoPlayer(width, videoHeight), ), Expanded( child: Scaffold( @@ -1013,10 +992,14 @@ class _VideoDetailPageVState extends State Widget get childWhenDisabledLandscapeInner => Obx( () { + final size = MediaQuery.sizeOf(context); + final double width = size.width; + final double height = size.height; + final padding = MediaQuery.paddingOf(context); if (enableVerticalExpand && videoDetailController.direction.value == 'vertical') { - final double videoHeight = context.height - - (removeSafeArea ? 0 : MediaQuery.of(context).padding.top); + final double videoHeight = + height - (removeSafeArea ? 0 : padding.top); final double videoWidth = videoHeight * 9 / 16; return Row( children: [ @@ -1025,7 +1008,7 @@ class _VideoDetailPageVState extends State isFullScreen ? const SizedBox.shrink() : videoIntro()), SizedBox( height: videoHeight, - width: isFullScreen ? context.width : videoWidth, + width: isFullScreen ? width : videoWidth, child: videoPlayer(videoWidth, videoHeight), ), Expanded( @@ -1059,10 +1042,9 @@ class _VideoDetailPageVState extends State ); } double videoWidth = - clampDouble(context.height / context.width * 1.08, 0.5, 0.7) * - context.width; - if (context.width >= 560) { - videoWidth = min(videoWidth, context.width - 280); + clampDouble(height / width * 1.08, 0.5, 0.7) * width; + if (width >= 560) { + videoWidth = min(videoWidth, width - 280); } final double videoHeight = videoWidth * 9 / 16; return Row( @@ -1070,19 +1052,17 @@ class _VideoDetailPageVState extends State Column( children: [ SizedBox( - width: isFullScreen ? context.width : videoWidth, - height: isFullScreen ? context.height : videoHeight, + width: isFullScreen ? width : videoWidth, + height: isFullScreen ? height : videoHeight, child: videoPlayer(videoWidth, videoHeight), ), Offstage( offstage: isFullScreen, child: SizedBox( width: videoWidth, - height: context.height - + height: height - videoHeight - - (removeSafeArea - ? 0 - : MediaQuery.of(context).padding.top), + (removeSafeArea ? 0 : padding.top), child: videoIntro(false, false), ), ), @@ -1091,14 +1071,10 @@ class _VideoDetailPageVState extends State Offstage( offstage: isFullScreen, child: SizedBox( - width: (context.width - + width: width - videoWidth - - (removeSafeArea - ? 0 - : (MediaQuery.of(context).padding.left + - MediaQuery.of(context).padding.right))), - height: context.height - - (removeSafeArea ? 0 : MediaQuery.of(context).padding.top), + (removeSafeArea ? 0 : padding.horizontal), + height: height - (removeSafeArea ? 0 : padding.top), child: Scaffold( key: videoDetailController.childKey, resizeToAvoidBottomInset: false, @@ -1591,7 +1567,7 @@ class _VideoDetailPageVState extends State return PopScope( canPop: !isFullScreen && (videoDetailController.horizontalScreen || - MediaQuery.of(context).orientation == Orientation.portrait), + MediaQuery.orientationOf(context) == Orientation.portrait), onPopInvokedWithResult: _onPopInvokedWithResult, child: Stack( clipBehavior: Clip.none, @@ -1753,6 +1729,7 @@ class _VideoDetailPageVState extends State } Widget videoIntro([bool needRelated = true, bool needCtr = true]) { + final bottom = MediaQuery.paddingOf(context).bottom; Widget introPanel() => Scaffold( resizeToAvoidBottomInset: false, backgroundColor: Colors.transparent, @@ -1793,8 +1770,7 @@ class _VideoDetailPageVState extends State ] else SliverToBoxAdapter( child: SizedBox( - height: MediaQuery.paddingOf(context).bottom + - StyleString.safeSpace, + height: bottom + StyleString.safeSpace, ), ), ] else if (videoDetailController.videoType == @@ -1810,7 +1786,7 @@ class _VideoDetailPageVState extends State ), SliverToBoxAdapter( child: SizedBox( - height: MediaQuery.paddingOf(context).bottom + + height: bottom + (videoDetailController.isPlayAll && MediaQuery.orientationOf(context) == Orientation.landscape @@ -1829,7 +1805,7 @@ class _VideoDetailPageVState extends State Positioned( left: 12, right: 12, - bottom: MediaQuery.of(context).padding.bottom + 12, + bottom: bottom + 12, child: Material( color: Colors.transparent, child: InkWell( @@ -2233,7 +2209,7 @@ class _VideoDetailPageVState extends State if (isFullScreen) { plPlayerController!.triggerFullScreen(status: false); } - if (MediaQuery.of(context).orientation == Orientation.landscape && + if (MediaQuery.orientationOf(context) == Orientation.landscape && !videoDetailController.horizontalScreen) { verticalScreenForTwoSeconds(); } diff --git a/lib/plugin/pl_player/view.dart b/lib/plugin/pl_player/view.dart index 579c6d13..244c5cfc 100644 --- a/lib/plugin/pl_player/view.dart +++ b/lib/plugin/pl_player/view.dart @@ -1801,15 +1801,12 @@ Widget buildSeekPreviewWidget(PlPlayerController plPlayerController) { if (plPlayerController.videoShot == null) { plPlayerController.getVideoShot(); } - return SizedBox.shrink( - key: ValueKey(plPlayerController.previewDx.value), - ); + return const SizedBox.shrink(); } VideoShotData data = plPlayerController.videoShot!['data']; return LayoutBuilder( - key: ValueKey(plPlayerController.previewDx.value), builder: (context, constraints) { try { double scale = plPlayerController.isFullScreen.value &&