Files
PiliPlus/lib/plugin/pl_player/utils/fullscreen.dart
bggRGjQaUbCoE 16c152d306 opt fullscreen
Closes #1442

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
2025-10-03 21:18:29 +08:00

96 lines
2.3 KiB
Dart

import 'dart:async';
import 'dart:io';
import 'package:PiliPlus/utils/storage_pref.dart';
import 'package:PiliPlus/utils/utils.dart';
import 'package:auto_orientation/auto_orientation.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';
bool _isDesktopFullScreen = false;
Future<void> enterDesktopFullscreen({bool inAppFullScreen = false}) async {
if (!inAppFullScreen && !_isDesktopFullScreen) {
_isDesktopFullScreen = true;
try {
await const MethodChannel(
'com.alexmercerind/media_kit_video',
).invokeMethod('Utils.EnterNativeFullscreen');
} catch (_) {
if (kDebugMode) rethrow;
}
}
}
Future<void> exitDesktopFullscreen() async {
if (_isDesktopFullScreen) {
_isDesktopFullScreen = false;
try {
await const MethodChannel(
'com.alexmercerind/media_kit_video',
).invokeMethod('Utils.ExitNativeFullscreen');
} catch (_) {
if (kDebugMode) rethrow;
}
}
}
//横屏
Future<void> landscape() async {
try {
await AutoOrientation.landscapeAutoMode(forceSensor: true);
} catch (_) {
if (kDebugMode) rethrow;
}
}
//竖屏
Future<void> verticalScreenForTwoSeconds() async {
await SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
await autoScreen();
}
//全向
bool allowRotateScreen = Pref.allowRotateScreen;
Future<void> autoScreen() async {
if (Utils.isMobile && allowRotateScreen) {
await SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
// DeviceOrientation.portraitDown,
DeviceOrientation.landscapeLeft,
DeviceOrientation.landscapeRight,
]);
}
}
Future<void> fullAutoModeForceSensor() async {
await AutoOrientation.fullAutoMode(forceSensor: true);
}
bool _showStatusBar = true;
Future<void> hideStatusBar() async {
if (!_showStatusBar) {
return;
}
_showStatusBar = false;
await SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersiveSticky);
}
//退出全屏显示
Future<void> showStatusBar() async {
if (_showStatusBar) {
return;
}
_showStatusBar = true;
SystemUiMode mode;
if (Platform.isAndroid && (await Utils.sdkInt < 29)) {
mode = SystemUiMode.manual;
} else {
mode = SystemUiMode.edgeToEdge;
}
await SystemChrome.setEnabledSystemUIMode(
mode,
overlays: SystemUiOverlay.values,
);
}