diff --git a/lib/pages/live_room/view.dart b/lib/pages/live_room/view.dart index 73e4d29eb..b68f1b250 100644 --- a/lib/pages/live_room/view.dart +++ b/lib/pages/live_room/view.dart @@ -36,6 +36,7 @@ import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/size_ext.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/image_utils.dart'; +import 'package:PiliPlus/utils/mobile_observer.dart'; import 'package:PiliPlus/utils/page_utils.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; import 'package:PiliPlus/utils/storage.dart'; @@ -72,7 +73,7 @@ class _LiveRoomPageState extends State @override void initState() { super.initState(); - WidgetsBinding.instance.addObserver(this); + addObserverMobile(this); _liveRoomController = Get.put( LiveRoomController(heroTag), tag: heroTag, @@ -94,7 +95,7 @@ class _LiveRoomPageState extends State @override Future didPopNext() async { - WidgetsBinding.instance.addObserver(this); + addObserverMobile(this); plPlayerController ..isLive = true ..danmakuController = _liveRoomController.danmakuController; @@ -121,7 +122,7 @@ class _LiveRoomPageState extends State @override void didPushNext() { - WidgetsBinding.instance.removeObserver(this); + removeObserverMobile(this); plPlayerController.removeStatusLister(playerListener); _liveRoomController ..danmakuController?.clear() @@ -148,8 +149,8 @@ class _LiveRoomPageState extends State @override void dispose() { + removeObserverMobile(this); videoPlayerServiceHandler?.onVideoDetailDispose(heroTag); - WidgetsBinding.instance.removeObserver(this); if (Platform.isAndroid && !plPlayerController.setSystemBrightness) { ScreenBrightnessPlatform.instance.resetApplicationScreenBrightness(); } diff --git a/lib/pages/live_room/widgets/header_control.dart b/lib/pages/live_room/widgets/header_control.dart index 068fdaaff..f0d02d1a9 100644 --- a/lib/pages/live_room/widgets/header_control.dart +++ b/lib/pages/live_room/widgets/header_control.dart @@ -196,26 +196,27 @@ class _LiveHeaderControlState extends State ); }, ), - Obx(() { - final continuePlayInBackground = - plPlayerController.continuePlayInBackground.value; - return ComBtn( - height: 30, - tooltip: '${continuePlayInBackground ? '关闭' : ''}后台播放', - onTap: plPlayerController.setContinuePlayInBackground, - icon: continuePlayInBackground - ? const Icon( - size: 18, - Icons.play_circle, - color: Colors.white, - ) - : const Icon( - size: 18, - Icons.play_circle_outline, - color: Colors.white, - ), - ); - }), + if (PlatformUtils.isMobile) + Obx(() { + final continuePlayInBackground = + plPlayerController.continuePlayInBackground.value; + return ComBtn( + height: 30, + tooltip: '${continuePlayInBackground ? '关闭' : ''}后台播放', + onTap: plPlayerController.setContinuePlayInBackground, + icon: continuePlayInBackground + ? const Icon( + size: 18, + Icons.play_circle, + color: Colors.white, + ) + : const Icon( + size: 18, + Icons.play_circle_outline, + color: Colors.white, + ), + ); + }), ComBtn( height: 30, tooltip: '定时关闭', diff --git a/lib/pages/main/view.dart b/lib/pages/main/view.dart index 36353995e..d79fe82fd 100644 --- a/lib/pages/main/view.dart +++ b/lib/pages/main/view.dart @@ -14,6 +14,7 @@ import 'package:PiliPlus/utils/app_scheme.dart'; import 'package:PiliPlus/utils/extension/context_ext.dart'; import 'package:PiliPlus/utils/extension/size_ext.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart'; +import 'package:PiliPlus/utils/mobile_observer.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; import 'package:PiliPlus/utils/storage.dart'; import 'package:PiliPlus/utils/storage_key.dart'; @@ -48,7 +49,7 @@ class _MainAppState extends PopScopeState @override void initState() { super.initState(); - WidgetsBinding.instance.addObserver(this); + addObserverMobile(this); if (PlatformUtils.isDesktop) { windowManager ..addListener(this) @@ -80,7 +81,7 @@ class _MainAppState extends PopScopeState @override void didPopNext() { - WidgetsBinding.instance.addObserver(this); + addObserverMobile(this); _mainController ..checkUnreadDynamic() ..checkDefaultSearch(true) @@ -90,7 +91,7 @@ class _MainAppState extends PopScopeState @override void didPushNext() { - WidgetsBinding.instance.removeObserver(this); + removeObserverMobile(this); super.didPushNext(); } @@ -110,7 +111,7 @@ class _MainAppState extends PopScopeState trayManager.removeListener(this); windowManager.removeListener(this); } - WidgetsBinding.instance.removeObserver(this); + removeObserverMobile(this); PiliScheme.listener?.cancel(); GStorage.close(); super.dispose(); diff --git a/lib/pages/video/view.dart b/lib/pages/video/view.dart index 42f66da77..dbf5b9eec 100644 --- a/lib/pages/video/view.dart +++ b/lib/pages/video/view.dart @@ -54,6 +54,7 @@ import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/scroll_controller_ext.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/image_utils.dart'; +import 'package:PiliPlus/utils/mobile_observer.dart'; import 'package:PiliPlus/utils/num_utils.dart'; import 'package:PiliPlus/utils/page_utils.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; @@ -162,7 +163,7 @@ class _VideoDetailPageVState extends State videoSourceInit(); autoScreen(); - WidgetsBinding.instance.addObserver(this); + addObserverMobile(this); } // 获取视频资源,初始化播放器 @@ -372,7 +373,7 @@ class _VideoDetailPageVState extends State PlPlayerController.updatePlayCount(); } } - WidgetsBinding.instance.removeObserver(this); + removeObserverMobile(this); if (PlatformUtils.isMobile) { showStatusBar(); } @@ -385,7 +386,7 @@ class _VideoDetailPageVState extends State super.didPushNext(); isShowing = false; - WidgetsBinding.instance.removeObserver(this); + removeObserverMobile(this); if (Platform.isAndroid && !videoDetailController.setSystemBrightness) { ScreenBrightnessPlatform.instance.resetApplicationScreenBrightness(); @@ -418,7 +419,7 @@ class _VideoDetailPageVState extends State isShowing = true; - WidgetsBinding.instance.addObserver(this); + addObserverMobile(this); plPlayerController?.isLive = false; if (videoDetailController.plPlayerController.playerStatus.isPlaying && diff --git a/lib/plugin/pl_player/view/view.dart b/lib/plugin/pl_player/view/view.dart index 1ce63b86d..2ce32bdf9 100644 --- a/lib/plugin/pl_player/view/view.dart +++ b/lib/plugin/pl_player/view/view.dart @@ -55,6 +55,7 @@ import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/id_utils.dart'; import 'package:PiliPlus/utils/image_utils.dart'; +import 'package:PiliPlus/utils/mobile_observer.dart'; import 'package:PiliPlus/utils/path_utils.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; import 'package:PiliPlus/utils/storage.dart'; @@ -209,7 +210,7 @@ class _PLVideoPlayerState extends State @override void initState() { super.initState(); - WidgetsBinding.instance.addObserver(this); + addObserverMobile(this); _controlsListener = plPlayerController.showControls.listen( _onControlChanged, @@ -338,7 +339,7 @@ class _PLVideoPlayerState extends State @override void dispose() { - WidgetsBinding.instance.removeObserver(this); + removeObserverMobile(this); _danmakuListener?.cancel(); _tapGestureRecognizer.dispose(); _longPressRecognizer?.dispose(); diff --git a/lib/utils/mobile_observer.dart b/lib/utils/mobile_observer.dart new file mode 100644 index 000000000..a45c0dfd9 --- /dev/null +++ b/lib/utils/mobile_observer.dart @@ -0,0 +1,15 @@ +import 'package:PiliPlus/utils/platform_utils.dart'; +import 'package:flutter/widgets.dart' + show WidgetsBinding, WidgetsBindingObserver; + +void addObserverMobile(WidgetsBindingObserver observer) { + if (PlatformUtils.isMobile) { + WidgetsBinding.instance.addObserver(observer); + } +} + +void removeObserverMobile(WidgetsBindingObserver observer) { + if (PlatformUtils.isMobile) { + WidgetsBinding.instance.removeObserver(observer); + } +}