diff --git a/lib/common/widgets/fractionally_sized_box.dart b/lib/common/widgets/fractionally_sized_box.dart index adf4679d2..558404fb2 100644 --- a/lib/common/widgets/fractionally_sized_box.dart +++ b/lib/common/widgets/fractionally_sized_box.dart @@ -7,10 +7,10 @@ class CustomFractionallySizedBox extends FractionallySizedBox { const CustomFractionallySizedBox({ super.key, super.alignment, - super.widthFactor, - super.heightFactor, - super.child, + required double super.widthFactor, + required double super.heightFactor, required this.maxWidth, + super.child, }); final double maxWidth; @@ -44,7 +44,10 @@ class CustomRenderFractionallySizedOverflowBox double minWidth = constraints.minWidth; double maxWidth = constraints.maxWidth; if (widthFactor != null) { - final double width = math.min(_maxWidth, maxWidth * widthFactor!); + double width = maxWidth * widthFactor!; + if (maxWidth > constraints.maxHeight) { + width = math.min(_maxWidth, width); + } minWidth = width; maxWidth = width; } diff --git a/lib/pages/video/controller.dart b/lib/pages/video/controller.dart index d6bdb81e2..d529b5083 100644 --- a/lib/pages/video/controller.dart +++ b/lib/pages/video/controller.dart @@ -472,7 +472,6 @@ class VideoDetailController extends GetxController PageUtils.showVideoBottomSheet( context, child: panel(), - isFullScreen: () => plPlayerController.isFullScreen.value, ); } else { childKey.currentState?.showBottomSheet( @@ -964,7 +963,6 @@ class VideoDetailController extends GetxController videoDetailController: this, plPlayerController: plPlayerController, ), - isFullScreen: () => plPlayerController.isFullScreen.value, ); } else { childKey.currentState?.showBottomSheet( @@ -1244,7 +1242,6 @@ class VideoDetailController extends GetxController isStein: graphVersion != null, title: title, ), - isFullScreen: () => plPlayerController.isFullScreen.value, ); } else { childKey.currentState?.showBottomSheet( diff --git a/lib/pages/video/view.dart b/lib/pages/video/view.dart index eb93dfbf9..c1e4ad408 100644 --- a/lib/pages/video/view.dart +++ b/lib/pages/video/view.dart @@ -1776,7 +1776,6 @@ class _VideoDetailPageVState extends State if (isFullScreen || videoDetailController.showVideoSheet) { PageUtils.showVideoBottomSheet( context, - isFullScreen: () => isFullScreen, child: listSheetContent(enableSlide: false), ); } else { @@ -1839,7 +1838,6 @@ class _VideoDetailPageVState extends State if (isFullScreen || videoDetailController.showVideoSheet) { PageUtils.showVideoBottomSheet( context, - isFullScreen: () => isFullScreen, child: ViewPointsPage( enableSlide: false, videoDetailController: videoDetailController, diff --git a/lib/pages/video/widgets/header_control.dart b/lib/pages/video/widgets/header_control.dart index afcfc6391..7b75fdc7d 100644 --- a/lib/pages/video/widgets/header_control.dart +++ b/lib/pages/video/widgets/header_control.dart @@ -1210,7 +1210,7 @@ class HeaderControlState extends State /// 字幕设置 void showSetSubtitle() { showBottomSheet( - padding: isFullScreen ? 70 : null, + padding: () => isFullScreen ? const .only(bottom: 70) : .zero, (context, setState) { final theme = Theme.of(context); diff --git a/lib/pages/video/widgets/header_mixin.dart b/lib/pages/video/widgets/header_mixin.dart index 51ceab61a..0f0431c0c 100644 --- a/lib/pages/video/widgets/header_mixin.dart +++ b/lib/pages/video/widgets/header_mixin.dart @@ -14,12 +14,11 @@ mixin HeaderMixin on State { Future? showBottomSheet( StatefulWidgetBuilder builder, { - double? padding, + ValueGetter? padding, }) { return PageUtils.showVideoBottomSheet( context, maxWidth: 512, - isFullScreen: () => isFullScreen, padding: padding, child: StatefulBuilder( builder: (context, setState) => builder(context, setState), diff --git a/lib/services/shutdown_timer_service.dart b/lib/services/shutdown_timer_service.dart index ad2df496f..9204dcf08 100644 --- a/lib/services/shutdown_timer_service.dart +++ b/lib/services/shutdown_timer_service.dart @@ -149,7 +149,6 @@ class ShutdownTimerService { PageUtils.showVideoBottomSheet( context, maxWidth: 512, - isFullScreen: () => isFullScreen, child: StatefulBuilder( builder: (_, setState) { final ThemeData theme = Theme.of(context); diff --git a/lib/utils/page_utils.dart b/lib/utils/page_utils.dart index 1ce70dd04..71a31a3cf 100644 --- a/lib/utils/page_utils.dart +++ b/lib/utils/page_utils.dart @@ -437,8 +437,7 @@ abstract final class PageUtils { static Future? showVideoBottomSheet( BuildContext context, { required Widget child, - required ValueGetter isFullScreen, - double? padding, + ValueGetter? padding, double maxWidth = 500, }) { if (!context.mounted) { @@ -447,28 +446,17 @@ abstract final class PageUtils { return Get.key.currentState!.push( PublishRoute( pageBuilder: (context, animation, secondaryAnimation) { - if (context.isPortrait) { - return SafeArea( - child: FractionallySizedBox( - heightFactor: 0.7, - widthFactor: 1.0, - alignment: Alignment.bottomCenter, - child: isFullScreen() && padding != null - ? Padding( - padding: EdgeInsets.only(bottom: padding), - child: child, - ) - : child, - ), - ); - } + final isPortrait = context.isPortrait; return SafeArea( child: CustomFractionallySizedBox( maxWidth: maxWidth, - widthFactor: 0.5, - heightFactor: 1.0, - alignment: Alignment.centerRight, - child: child, + widthFactor: isPortrait ? 1.0 : 0.5, + heightFactor: isPortrait ? 0.7 : 1.0, + alignment: isPortrait ? .bottomCenter : .centerRight, + child: Padding( + padding: isPortrait ? padding?.call() ?? .zero : .zero, + child: child, + ), ), ); },