feat: 应用切换至后台自动画中画 issues #212

This commit is contained in:
guozhigq
2023-10-23 23:34:24 +08:00
parent 2db5c45158
commit 81bf8d915c
3 changed files with 27 additions and 1 deletions

View File

@ -85,6 +85,12 @@ class _PlaySettingState extends State<PlaySetting> {
setKey: SettingBoxKey.enableBackgroundPlay, setKey: SettingBoxKey.enableBackgroundPlay,
defaultVal: false, defaultVal: false,
), ),
const SetSwitchItem(
title: '自动PiP播放',
subTitle: 'app切换至后台时画中画播放',
setKey: SettingBoxKey.autoPiP,
defaultVal: false,
),
const SetSwitchItem( const SetSwitchItem(
title: '自动全屏', title: '自动全屏',
subTitle: '视频开始播放时进入全屏', subTitle: '视频开始播放时进入全屏',

View File

@ -32,7 +32,7 @@ class VideoDetailPage extends StatefulWidget {
} }
class _VideoDetailPageState extends State<VideoDetailPage> class _VideoDetailPageState extends State<VideoDetailPage>
with TickerProviderStateMixin, RouteAware { with TickerProviderStateMixin, RouteAware, WidgetsBindingObserver {
late VideoDetailController videoDetailController; late VideoDetailController videoDetailController;
PlPlayerController? plPlayerController; PlPlayerController? plPlayerController;
final ScrollController _extendNestCtr = ScrollController(); final ScrollController _extendNestCtr = ScrollController();
@ -52,6 +52,8 @@ class _VideoDetailPageState extends State<VideoDetailPage>
// 自动退出全屏 // 自动退出全屏
late bool autoExitFullcreen; late bool autoExitFullcreen;
late bool autoPlayEnable; late bool autoPlayEnable;
late bool autoPiP;
final floating = Floating();
@override @override
void initState() { void initState() {
@ -65,8 +67,11 @@ class _VideoDetailPageState extends State<VideoDetailPage>
setting.get(SettingBoxKey.enableAutoExit, defaultValue: false); setting.get(SettingBoxKey.enableAutoExit, defaultValue: false);
autoPlayEnable = autoPlayEnable =
setting.get(SettingBoxKey.autoPlayEnable, defaultValue: true); setting.get(SettingBoxKey.autoPlayEnable, defaultValue: true);
autoPiP = setting.get(SettingBoxKey.autoPiP, defaultValue: false);
videoSourceInit(); videoSourceInit();
appbarStreamListen(); appbarStreamListen();
WidgetsBinding.instance.addObserver(this);
} }
// 获取视频资源,初始化播放器 // 获取视频资源,初始化播放器
@ -149,6 +154,8 @@ class _VideoDetailPageState extends State<VideoDetailPage>
if (videoDetailController.floating != null) { if (videoDetailController.floating != null) {
videoDetailController.floating!.dispose(); videoDetailController.floating!.dispose();
} }
WidgetsBinding.instance.removeObserver(this);
floating.dispose();
super.dispose(); super.dispose();
} }
@ -195,6 +202,17 @@ class _VideoDetailPageState extends State<VideoDetailPage>
.subscribe(this, ModalRoute.of(context) as PageRoute); .subscribe(this, ModalRoute.of(context) as PageRoute);
} }
@override
void didChangeAppLifecycleState(AppLifecycleState lifecycleState) {
if (lifecycleState == AppLifecycleState.inactive && autoPiP) {
floating.enable(
aspectRatio: Rational(
videoDetailController.data.dash!.video!.first.width!,
videoDetailController.data.dash!.video!.first.height!,
));
}
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final videoHeight = MediaQuery.of(context).size.width * 9 / 16; final videoHeight = MediaQuery.of(context).size.width * 9 / 16;
@ -493,6 +511,7 @@ class _VideoDetailPageState extends State<VideoDetailPage>
return PiPSwitcher( return PiPSwitcher(
childWhenDisabled: childWhenDisabled, childWhenDisabled: childWhenDisabled,
childWhenEnabled: childWhenEnabled, childWhenEnabled: childWhenEnabled,
floating: floating,
); );
} else { } else {
return childWhenDisabled; return childWhenDisabled;

View File

@ -106,6 +106,7 @@ class SettingBoxKey {
static const String enableAutoExit = 'enableAutoExit'; static const String enableAutoExit = 'enableAutoExit';
static const String p1080 = 'p1080'; static const String p1080 = 'p1080';
static const String enableCDN = 'enableCDN'; static const String enableCDN = 'enableCDN';
static const String autoPiP = 'autoPiP';
// youtube 双击快进快退 // youtube 双击快进快退
static const String enableQuickDouble = 'enableQuickDouble'; static const String enableQuickDouble = 'enableQuickDouble';