diff --git a/lib/common/widgets/image_viewer/gallery_viewer.dart b/lib/common/widgets/image_viewer/gallery_viewer.dart index be8479eda..84789351f 100644 --- a/lib/common/widgets/image_viewer/gallery_viewer.dart +++ b/lib/common/widgets/image_viewer/gallery_viewer.dart @@ -25,7 +25,9 @@ import 'package:PiliPlus/common/widgets/image_viewer/image.dart'; import 'package:PiliPlus/common/widgets/image_viewer/loading_indicator.dart'; import 'package:PiliPlus/common/widgets/image_viewer/viewer.dart'; import 'package:PiliPlus/common/widgets/scroll_physics.dart'; +import 'package:PiliPlus/main.dart' show tmpPadding; import 'package:PiliPlus/models/common/image_preview_type.dart'; +import 'package:PiliPlus/plugin/pl_player/utils/fullscreen.dart'; import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/string_ext.dart'; import 'package:PiliPlus/utils/image_utils.dart'; @@ -76,6 +78,7 @@ class _GalleryViewerState extends State late final int _quality; late final RxInt _currIndex; GlobalKey? _key; + EdgeInsets? _padding; late bool _hasInit = false; Player? _player; @@ -170,6 +173,25 @@ class _GalleryViewerState extends State ); } + final _hideSystemBar = PlatformUtils.isMobile && showSystemBar_; + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + if (_padding == null) { + final padding = MediaQuery.viewPaddingOf(context); + _padding = padding; + if (_hideSystemBar) { + tmpPadding = padding; + hideSystemBar()!.whenComplete( + () => WidgetsBinding.instance.addPostFrameCallback( + (_) => tmpPadding = null, + ), + ); + } + } + } + Matrix4 _onTransform(double val) { final scale = val.lerp(1.0, 0.25); @@ -259,6 +281,9 @@ class _GalleryViewerState extends State } Future.delayed(const Duration(milliseconds: 200), _currIndex.close); super.dispose(); + if (_hideSystemBar) { + showSystemBar(); + } } void _onPointerDown(PointerDownEvent event) { @@ -311,9 +336,7 @@ class _GalleryViewerState extends State right: 0, child: IgnorePointer( child: Container( - padding: - MediaQuery.viewPaddingOf(context) + - const EdgeInsets.fromLTRB(12, 8, 20, 8), + padding: _padding! + const EdgeInsets.fromLTRB(12, 8, 20, 8), decoration: BoxDecoration( gradient: LinearGradient( begin: Alignment.topCenter, diff --git a/lib/main.dart b/lib/main.dart index b9d566750..ef669d83e 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -46,6 +46,8 @@ import 'package:window_manager/window_manager.dart' hide calcWindowPosition; WebViewEnvironment? webViewEnvironment; +EdgeInsets? tmpPadding; + Future _initDownPath() async { if (PlatformUtils.isDesktop) { final customDownPath = Pref.downloadPath; @@ -313,16 +315,20 @@ class MyApp extends StatelessWidget { data: mediaQuery.copyWith( textScaler: textScaler, size: mediaQuery.size / uiScale, - padding: mediaQuery.padding / uiScale, + padding: (tmpPadding ?? mediaQuery.padding) / uiScale, viewInsets: mediaQuery.viewInsets / uiScale, - viewPadding: mediaQuery.viewPadding / uiScale, + viewPadding: (tmpPadding ?? mediaQuery.viewPadding) / uiScale, devicePixelRatio: mediaQuery.devicePixelRatio * uiScale, ), child: child!, ); } else { child = MediaQuery( - data: mediaQuery.copyWith(textScaler: textScaler), + data: mediaQuery.copyWith( + textScaler: textScaler, + padding: tmpPadding, + viewPadding: tmpPadding, + ), child: child!, ); } diff --git a/lib/pages/live_room/view.dart b/lib/pages/live_room/view.dart index 7e3cdf74f..065573ba3 100644 --- a/lib/pages/live_room/view.dart +++ b/lib/pages/live_room/view.dart @@ -84,7 +84,7 @@ class _LiveRoomPageState extends State ..addStatusLister(playerListener); PlPlayerController.setPlayCallBack(plPlayerController.play); if (plPlayerController.removeSafeArea) { - hideStatusBar(); + hideSystemBar(); } } diff --git a/lib/pages/video/view.dart b/lib/pages/video/view.dart index b9ffbc115..540d24c3a 100644 --- a/lib/pages/video/view.dart +++ b/lib/pages/video/view.dart @@ -142,7 +142,7 @@ class _VideoDetailPageVState extends State videoDetailController = Get.put(VideoDetailController(), tag: heroTag); if (videoDetailController.removeSafeArea) { - hideStatusBar(); + hideSystemBar(); } if (videoDetailController.showReply) { @@ -351,7 +351,7 @@ class _VideoDetailPageVState extends State } if (!videoDetailController.removeSafeArea) { - showStatusBar(); + showSystemBar(); } if (!videoDetailController.plPlayerController.isCloseAll) { diff --git a/lib/plugin/pl_player/controller.dart b/lib/plugin/pl_player/controller.dart index 15c23de32..4e459543a 100644 --- a/lib/plugin/pl_player/controller.dart +++ b/lib/plugin/pl_player/controller.dart @@ -1444,7 +1444,7 @@ class PlPlayerController with BlockConfigMixin { try { if (status) { if (PlatformUtils.isMobile) { - hideStatusBar(); + hideSystemBar(); if (orientation == null && mode == .none) { return; } @@ -1477,7 +1477,7 @@ class PlPlayerController with BlockConfigMixin { } else { if (PlatformUtils.isMobile) { if (!removeSafeArea) { - showStatusBar(); + showSystemBar(); } if (orientation == null && mode == .none) { return; @@ -1633,7 +1633,7 @@ class PlPlayerController with BlockConfigMixin { _playerCount = 0; if (removeSafeArea) { - showStatusBar(); + showSystemBar(); } danmakuController = null; _stopOrientationListener(); diff --git a/lib/plugin/pl_player/utils/fullscreen.dart b/lib/plugin/pl_player/utils/fullscreen.dart index 3c7065f2f..a04c4a82a 100644 --- a/lib/plugin/pl_player/utils/fullscreen.dart +++ b/lib/plugin/pl_player/utils/fullscreen.dart @@ -62,21 +62,22 @@ Future? fullMode() { ); } -bool _showStatusBar = true; -Future? hideStatusBar() { - if (!_showStatusBar) { +bool _showSystemBar = true; +bool get showSystemBar_ => _showSystemBar; +Future? hideSystemBar() { + if (!_showSystemBar) { return null; } - _showStatusBar = false; + _showSystemBar = false; return SystemChrome.setEnabledSystemUIMode(.immersiveSticky); } //退出全屏显示 -Future? showStatusBar() { - if (_showStatusBar) { +Future? showSystemBar() { + if (_showSystemBar) { return null; } - _showStatusBar = true; + _showSystemBar = true; return SystemChrome.setEnabledSystemUIMode( Platform.isAndroid && Utils.sdkInt < 29 ? .manual : .edgeToEdge, overlays: SystemUiOverlay.values,