mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-08-05 10:10:14 +08:00
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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: '定时关闭',
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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 &&
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
15
lib/utils/mobile_observer.dart
Normal file
15
lib/utils/mobile_observer.dart
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user