mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
opt in-app fullscreen
Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -161,7 +161,7 @@ class _LiveRoomPageState extends State<LiveRoomPage>
|
||||
if (isFullScreen && Platform.isIOS) {
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
if (!_liveRoomController.isPortrait.value) {
|
||||
landScape();
|
||||
landscape();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import 'package:PiliPlus/http/loading_state.dart';
|
||||
import 'package:PiliPlus/pages/login/controller.dart';
|
||||
import 'package:PiliPlus/utils/extension.dart';
|
||||
import 'package:PiliPlus/utils/image_utils.dart';
|
||||
import 'package:PiliPlus/utils/page_utils.dart';
|
||||
import 'package:PiliPlus/utils/utils.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
@@ -76,8 +77,8 @@ class _LoginPageState extends State<LoginPage> {
|
||||
),
|
||||
if (isMobile)
|
||||
TextButton.icon(
|
||||
onPressed: () => launchUrl(
|
||||
Uri.parse(_loginPageCtr.codeInfo.value.data.url),
|
||||
onPressed: () => PageUtils.launchURL(
|
||||
_loginPageCtr.codeInfo.value.data.url,
|
||||
mode: LaunchMode.externalNonBrowserApplication,
|
||||
),
|
||||
icon: const Icon(Icons.open_in_browser_outlined),
|
||||
|
||||
@@ -309,13 +309,4 @@ List<SettingsModel> get playSettings => [
|
||||
setKey: SettingBoxKey.tempPlayerConf,
|
||||
defaultVal: false,
|
||||
),
|
||||
if (Utils.isDesktop)
|
||||
const SettingsModel(
|
||||
settingsType: SettingsType.sw1tch,
|
||||
title: '独占全屏',
|
||||
subtitle: '关闭为应用内全屏',
|
||||
leading: Icon(Icons.zoom_out_map_rounded),
|
||||
setKey: SettingBoxKey.nativeFullscreen,
|
||||
defaultVal: true,
|
||||
),
|
||||
];
|
||||
|
||||
@@ -189,7 +189,7 @@ class _VideoDetailPageVState extends State<VideoDetailPageV>
|
||||
(mode == FullScreenMode.auto && isVertical) ||
|
||||
(mode == FullScreenMode.ratio &&
|
||||
(isVertical || maxHeight / maxWidth < 1.25)))) {
|
||||
landScape();
|
||||
landscape();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -153,7 +153,10 @@ class PlayerFocus extends StatelessWidget {
|
||||
return true;
|
||||
|
||||
case LogicalKeyboardKey.keyF:
|
||||
plPlayerController.triggerFullScreen(status: !isFullScreen);
|
||||
plPlayerController.triggerFullScreen(
|
||||
status: !isFullScreen,
|
||||
inAppFullScreen: HardwareKeyboard.instance.isShiftPressed,
|
||||
);
|
||||
return true;
|
||||
|
||||
case LogicalKeyboardKey.escape:
|
||||
|
||||
@@ -1463,7 +1463,10 @@ class PlPlayerController {
|
||||
|
||||
// 全屏
|
||||
bool fsProcessing = false;
|
||||
Future<void> triggerFullScreen({bool status = true}) async {
|
||||
Future<void> triggerFullScreen({
|
||||
bool status = true,
|
||||
bool inAppFullScreen = false,
|
||||
}) async {
|
||||
if (fsProcessing) {
|
||||
return;
|
||||
}
|
||||
@@ -1493,10 +1496,10 @@ class PlPlayerController {
|
||||
(isVertical || size.height / size.width < 1.25)))) {
|
||||
await verticalScreenForTwoSeconds();
|
||||
} else {
|
||||
await landScape();
|
||||
await landscape(inAppFullScreen: inAppFullScreen);
|
||||
}
|
||||
} else if (isFullScreen.value && !status) {
|
||||
showStatusBar();
|
||||
showStatusBar(inAppFullScreen: inAppFullScreen);
|
||||
toggleFullScreen(false);
|
||||
if (mode == FullScreenMode.none) {
|
||||
fsProcessing = false;
|
||||
|
||||
@@ -8,14 +8,14 @@ import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
|
||||
//横屏
|
||||
Future<void> landScape() async {
|
||||
Future<void> landscape({bool inAppFullScreen = false}) async {
|
||||
dynamic document;
|
||||
try {
|
||||
if (kIsWeb) {
|
||||
await document.documentElement?.requestFullscreen();
|
||||
} else if (Utils.isMobile) {
|
||||
await AutoOrientation.landscapeAutoMode(forceSensor: true);
|
||||
} else if (Utils.isDesktop && Pref.nativeFullscreen) {
|
||||
} else if (Utils.isDesktop && !inAppFullScreen) {
|
||||
await const MethodChannel(
|
||||
'com.alexmercerind/media_kit_video',
|
||||
).invokeMethod(
|
||||
@@ -76,7 +76,7 @@ Future<void> hideStatusBar() async {
|
||||
bool _showStatusBar = true;
|
||||
|
||||
//退出全屏显示
|
||||
Future<void> showStatusBar() async {
|
||||
Future<void> showStatusBar({bool inAppFullScreen = false}) async {
|
||||
if (_showStatusBar) {
|
||||
return;
|
||||
}
|
||||
@@ -94,7 +94,7 @@ Future<void> showStatusBar() async {
|
||||
mode,
|
||||
overlays: SystemUiOverlay.values,
|
||||
);
|
||||
} else if (Utils.isDesktop && Pref.nativeFullscreen) {
|
||||
} else if (Utils.isDesktop && !inAppFullScreen) {
|
||||
await const MethodChannel(
|
||||
'com.alexmercerind/media_kit_video',
|
||||
).invokeMethod(
|
||||
|
||||
@@ -631,13 +631,13 @@ abstract class PageUtils {
|
||||
}
|
||||
}
|
||||
|
||||
static Future<void> launchURL(String url) async {
|
||||
static Future<void> launchURL(
|
||||
String url, {
|
||||
LaunchMode mode = LaunchMode.externalApplication,
|
||||
}) async {
|
||||
try {
|
||||
final Uri uri = Uri.parse(url);
|
||||
if (!await launchUrl(
|
||||
uri,
|
||||
mode: LaunchMode.externalApplication,
|
||||
)) {
|
||||
if (!await launchUrl(uri, mode: mode)) {
|
||||
SmartDialog.showToast('Could not launch $url');
|
||||
}
|
||||
} catch (e) {
|
||||
|
||||
@@ -213,8 +213,7 @@ abstract class SettingBoxKey {
|
||||
enableGradientBg = 'enableGradientBg',
|
||||
navBarSort = 'navBarSort',
|
||||
tempPlayerConf = 'tempPlayerConf',
|
||||
reduceLuxColor = 'reduceLuxColor',
|
||||
nativeFullscreen = 'nativeFullscreen';
|
||||
reduceLuxColor = 'reduceLuxColor';
|
||||
}
|
||||
|
||||
abstract class LocalCacheKey {
|
||||
|
||||
@@ -832,7 +832,4 @@ abstract class Pref {
|
||||
|
||||
static bool get keyboardControl =>
|
||||
_setting.get(SettingBoxKey.keyboardControl, defaultValue: true);
|
||||
|
||||
static bool get nativeFullscreen =>
|
||||
_setting.get(SettingBoxKey.nativeFullscreen, defaultValue: true);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user