如何在Flutter中获取设备首选屏幕方向?视频播放器场景需求
解决方案:保存并恢复进入页面前的屏幕方向
你不需要询问开发者配置的方向,直接利用SystemChrome.getPreferredOrientations()就能获取当前应用的屏幕方向设置,步骤如下:
- 进入自定义页面前保存当前方向
在跳转到视频播放页之前,或者在页面的initState生命周期中,异步获取当前应用的首选方向列表并保存:
List<DeviceOrientation>? _previousOrientations; @override void initState() { super.initState(); _savePreviousOrientations(); } Future<void> _savePreviousOrientations() async { _previousOrientations = await SystemChrome.getPreferredOrientations(); // 之后设置支持所有屏幕方向 await SystemChrome.setPreferredOrientations([ DeviceOrientation.portraitUp, DeviceOrientation.portraitDown, DeviceOrientation.landscapeLeft, DeviceOrientation.landscapeRight, ]); }
- 退出页面时恢复方向
在页面的dispose方法中,将屏幕方向恢复到之前保存的状态:
@override void dispose() { if (_previousOrientations != null) { SystemChrome.setPreferredOrientations(_previousOrientations!); } super.dispose(); }
关键说明
SystemChrome.getPreferredOrientations()返回的是当前Flutter应用已经生效的方向配置,不管是开发者手动设置的还是系统默认的,完全贴合你需要恢复到“进入页面之前状态”的需求。- 注意必须在异步环境下调用该方法,因为它返回
Future<List<DeviceOrientation>>。 - 如果是通过路由跳转进入播放页,也可以在跳转前保存方向,比如:
final previousOrientations = await SystemChrome.getPreferredOrientations(); Navigator.push(context, MaterialPageRoute(builder: (_) => VideoPlayerPage())) .then((_) { // 页面返回后恢复方向 SystemChrome.setPreferredOrientations(previousOrientations); });
内容的提问来源于stack exchange,提问作者Akramjon Minochdinov
相关产品推荐
相关产品推荐

