screen_handler.dart
1.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import 'package:appframe/services/dispatcher.dart';
import 'package:flutter/services.dart' hide MessageHandler;
class ScreenHandler extends MessageHandler {
/// 是否处于横屏全屏状态
bool _isLandscape = false;
@override
Future<dynamic> handleMessage(dynamic params) async {
if (params is! Map<String, dynamic>) {
throw Exception('参数错误');
}
int type = params['type'];
await _setOrientation(type);
return true;
}
Future<void> _setOrientation(int screenType) async {
if (screenType == 2) {
// 横屏模式
_isLandscape = true;
await SystemChrome.setPreferredOrientations([
DeviceOrientation.landscapeLeft,
DeviceOrientation.landscapeRight,
]);
// 隐藏状态栏(immersiveSticky:短暂显示后自动隐藏)
await SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersiveSticky);
// 监听系统UI变化,用户滑动唤出状态栏后立即重新隐藏
SystemChrome.setSystemUIChangeCallback((isSystemUIDefaultVisible) async {
if (_isLandscape && isSystemUIDefaultVisible) {
await SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersiveSticky);
}
});
} else {
// 竖屏模式(默认)
_isLandscape = false;
await SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]);
// 显示状态栏
await SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
// 移除系统UI变化监听
SystemChrome.setSystemUIChangeCallback(null);
}
}
}