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

Flutter如何阻止设备方向变更并强制保持竖屏显示?

解决Flutter强制竖屏但模拟器旋转仍生效的问题

嘿,我之前也碰到过一模一样的情况!你写的代码方向是对的,但可能漏掉了几个关键步骤,我来帮你梳理下:

1. 确保Flutter引擎初始化完成后再设置方向

SystemChrome的配置需要在Flutter与原生平台的绑定完成后执行,不然设置可能不会生效。你需要先调用WidgetsFlutterBinding.ensureInitialized(),并且加上await等待设置完成:

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

void main() async {
  // 先初始化Flutter与原生的绑定
  WidgetsFlutterBinding.ensureInitialized();
  // 等待方向设置生效
  await SystemChrome.setPreferredOrientations([
    DeviceOrientation.portraitUp,
    DeviceOrientation.portraitDown,
  ]);
  runApp(const MyApp());
}

2. 从Android原生层面锁定方向

有时候即使Flutter代码设置了,Android系统的Activity配置还是允许旋转,这时候需要修改AndroidManifest.xml来强制竖屏:

找到android/app/src/main/AndroidManifest.xml,在你的主Activity标签里添加android:screenOrientation="portrait"属性:

<activity
    android:name=".MainActivity"
    android:launchMode="singleTop"
    android:theme="@style/LaunchTheme"
    android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
    android:hardwareAccelerated="true"
    android:windowSoftInputMode="adjustResize"
    android:screenOrientation="portrait"> <!-- 添加这一行 -->
    <!-- 其他内容 -->
</activity>

3. 冷重启App和模拟器

做完上面的修改后,记得完全停止App再重新运行,如果模拟器还是有问题,可以重启一下模拟器——有时候缓存会导致配置不生效。

按照这几步操作后,模拟器旋转时应该就会保持竖屏不变了!

内容的提问来源于stack exchange,提问作者boeledi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:48:16