You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter中获取设备首选屏幕方向?视频播放器场景需求

解决方案:保存并恢复进入页面前的屏幕方向

你不需要询问开发者配置的方向,直接利用SystemChrome.getPreferredOrientations()就能获取当前应用的屏幕方向设置,步骤如下:

  1. 进入自定义页面前保存当前方向
    在跳转到视频播放页之前,或者在页面的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,
  ]);
}
  1. 退出页面时恢复方向
    在页面的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 04:15:58