Signed-off-by: dom <githubaccount56556@proton.me>
This commit is contained in:
dom
2026-03-22 16:03:30 +08:00
parent 8f00ca5680
commit fc7fc18b14
6 changed files with 54 additions and 34 deletions

View File

@@ -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/size_ext.dart';
import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart';
import 'package:PiliPlus/utils/image_utils.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/page_utils.dart';
import 'package:PiliPlus/utils/platform_utils.dart'; import 'package:PiliPlus/utils/platform_utils.dart';
import 'package:PiliPlus/utils/storage.dart'; import 'package:PiliPlus/utils/storage.dart';
@@ -72,7 +73,7 @@ class _LiveRoomPageState extends State<LiveRoomPage>
@override @override
void initState() { void initState() {
super.initState(); super.initState();
WidgetsBinding.instance.addObserver(this); addObserverMobile(this);
_liveRoomController = Get.put( _liveRoomController = Get.put(
LiveRoomController(heroTag), LiveRoomController(heroTag),
tag: heroTag, tag: heroTag,
@@ -94,7 +95,7 @@ class _LiveRoomPageState extends State<LiveRoomPage>
@override @override
Future<void> didPopNext() async { Future<void> didPopNext() async {
WidgetsBinding.instance.addObserver(this); addObserverMobile(this);
plPlayerController plPlayerController
..isLive = true ..isLive = true
..danmakuController = _liveRoomController.danmakuController; ..danmakuController = _liveRoomController.danmakuController;
@@ -121,7 +122,7 @@ class _LiveRoomPageState extends State<LiveRoomPage>
@override @override
void didPushNext() { void didPushNext() {
WidgetsBinding.instance.removeObserver(this); removeObserverMobile(this);
plPlayerController.removeStatusLister(playerListener); plPlayerController.removeStatusLister(playerListener);
_liveRoomController _liveRoomController
..danmakuController?.clear() ..danmakuController?.clear()
@@ -148,8 +149,8 @@ class _LiveRoomPageState extends State<LiveRoomPage>
@override @override
void dispose() { void dispose() {
removeObserverMobile(this);
videoPlayerServiceHandler?.onVideoDetailDispose(heroTag); videoPlayerServiceHandler?.onVideoDetailDispose(heroTag);
WidgetsBinding.instance.removeObserver(this);
if (Platform.isAndroid && !plPlayerController.setSystemBrightness) { if (Platform.isAndroid && !plPlayerController.setSystemBrightness) {
ScreenBrightnessPlatform.instance.resetApplicationScreenBrightness(); ScreenBrightnessPlatform.instance.resetApplicationScreenBrightness();
} }

View File

@@ -196,26 +196,27 @@ class _LiveHeaderControlState extends State<LiveHeaderControl>
); );
}, },
), ),
Obx(() { if (PlatformUtils.isMobile)
final continuePlayInBackground = Obx(() {
plPlayerController.continuePlayInBackground.value; final continuePlayInBackground =
return ComBtn( plPlayerController.continuePlayInBackground.value;
height: 30, return ComBtn(
tooltip: '${continuePlayInBackground ? '关闭' : ''}后台播放', height: 30,
onTap: plPlayerController.setContinuePlayInBackground, tooltip: '${continuePlayInBackground ? '关闭' : ''}后台播放',
icon: continuePlayInBackground onTap: plPlayerController.setContinuePlayInBackground,
? const Icon( icon: continuePlayInBackground
size: 18, ? const Icon(
Icons.play_circle, size: 18,
color: Colors.white, Icons.play_circle,
) color: Colors.white,
: const Icon( )
size: 18, : const Icon(
Icons.play_circle_outline, size: 18,
color: Colors.white, Icons.play_circle_outline,
), color: Colors.white,
); ),
}), );
}),
ComBtn( ComBtn(
height: 30, height: 30,
tooltip: '定时关闭', tooltip: '定时关闭',

View File

@@ -14,6 +14,7 @@ import 'package:PiliPlus/utils/app_scheme.dart';
import 'package:PiliPlus/utils/extension/context_ext.dart'; import 'package:PiliPlus/utils/extension/context_ext.dart';
import 'package:PiliPlus/utils/extension/size_ext.dart'; import 'package:PiliPlus/utils/extension/size_ext.dart';
import 'package:PiliPlus/utils/extension/theme_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/platform_utils.dart';
import 'package:PiliPlus/utils/storage.dart'; import 'package:PiliPlus/utils/storage.dart';
import 'package:PiliPlus/utils/storage_key.dart'; import 'package:PiliPlus/utils/storage_key.dart';
@@ -48,7 +49,7 @@ class _MainAppState extends PopScopeState<MainApp>
@override @override
void initState() { void initState() {
super.initState(); super.initState();
WidgetsBinding.instance.addObserver(this); addObserverMobile(this);
if (PlatformUtils.isDesktop) { if (PlatformUtils.isDesktop) {
windowManager windowManager
..addListener(this) ..addListener(this)
@@ -80,7 +81,7 @@ class _MainAppState extends PopScopeState<MainApp>
@override @override
void didPopNext() { void didPopNext() {
WidgetsBinding.instance.addObserver(this); addObserverMobile(this);
_mainController _mainController
..checkUnreadDynamic() ..checkUnreadDynamic()
..checkDefaultSearch(true) ..checkDefaultSearch(true)
@@ -90,7 +91,7 @@ class _MainAppState extends PopScopeState<MainApp>
@override @override
void didPushNext() { void didPushNext() {
WidgetsBinding.instance.removeObserver(this); removeObserverMobile(this);
super.didPushNext(); super.didPushNext();
} }
@@ -110,7 +111,7 @@ class _MainAppState extends PopScopeState<MainApp>
trayManager.removeListener(this); trayManager.removeListener(this);
windowManager.removeListener(this); windowManager.removeListener(this);
} }
WidgetsBinding.instance.removeObserver(this); removeObserverMobile(this);
PiliScheme.listener?.cancel(); PiliScheme.listener?.cancel();
GStorage.close(); GStorage.close();
super.dispose(); super.dispose();

View File

@@ -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/scroll_controller_ext.dart';
import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart';
import 'package:PiliPlus/utils/image_utils.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/num_utils.dart';
import 'package:PiliPlus/utils/page_utils.dart'; import 'package:PiliPlus/utils/page_utils.dart';
import 'package:PiliPlus/utils/platform_utils.dart'; import 'package:PiliPlus/utils/platform_utils.dart';
@@ -162,7 +163,7 @@ class _VideoDetailPageVState extends State<VideoDetailPageV>
videoSourceInit(); videoSourceInit();
autoScreen(); autoScreen();
WidgetsBinding.instance.addObserver(this); addObserverMobile(this);
} }
// 获取视频资源,初始化播放器 // 获取视频资源,初始化播放器
@@ -372,7 +373,7 @@ class _VideoDetailPageVState extends State<VideoDetailPageV>
PlPlayerController.updatePlayCount(); PlPlayerController.updatePlayCount();
} }
} }
WidgetsBinding.instance.removeObserver(this); removeObserverMobile(this);
if (PlatformUtils.isMobile) { if (PlatformUtils.isMobile) {
showStatusBar(); showStatusBar();
} }
@@ -385,7 +386,7 @@ class _VideoDetailPageVState extends State<VideoDetailPageV>
super.didPushNext(); super.didPushNext();
isShowing = false; isShowing = false;
WidgetsBinding.instance.removeObserver(this); removeObserverMobile(this);
if (Platform.isAndroid && !videoDetailController.setSystemBrightness) { if (Platform.isAndroid && !videoDetailController.setSystemBrightness) {
ScreenBrightnessPlatform.instance.resetApplicationScreenBrightness(); ScreenBrightnessPlatform.instance.resetApplicationScreenBrightness();
@@ -418,7 +419,7 @@ class _VideoDetailPageVState extends State<VideoDetailPageV>
isShowing = true; isShowing = true;
WidgetsBinding.instance.addObserver(this); addObserverMobile(this);
plPlayerController?.isLive = false; plPlayerController?.isLive = false;
if (videoDetailController.plPlayerController.playerStatus.isPlaying && if (videoDetailController.plPlayerController.playerStatus.isPlaying &&

View File

@@ -55,6 +55,7 @@ import 'package:PiliPlus/utils/extension/num_ext.dart';
import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart';
import 'package:PiliPlus/utils/id_utils.dart'; import 'package:PiliPlus/utils/id_utils.dart';
import 'package:PiliPlus/utils/image_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/path_utils.dart';
import 'package:PiliPlus/utils/platform_utils.dart'; import 'package:PiliPlus/utils/platform_utils.dart';
import 'package:PiliPlus/utils/storage.dart'; import 'package:PiliPlus/utils/storage.dart';
@@ -209,7 +210,7 @@ class _PLVideoPlayerState extends State<PLVideoPlayer>
@override @override
void initState() { void initState() {
super.initState(); super.initState();
WidgetsBinding.instance.addObserver(this); addObserverMobile(this);
_controlsListener = plPlayerController.showControls.listen( _controlsListener = plPlayerController.showControls.listen(
_onControlChanged, _onControlChanged,
@@ -338,7 +339,7 @@ class _PLVideoPlayerState extends State<PLVideoPlayer>
@override @override
void dispose() { void dispose() {
WidgetsBinding.instance.removeObserver(this); removeObserverMobile(this);
_danmakuListener?.cancel(); _danmakuListener?.cancel();
_tapGestureRecognizer.dispose(); _tapGestureRecognizer.dispose();
_longPressRecognizer?.dispose(); _longPressRecognizer?.dispose();

View File

@@ -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);
}
}