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
相关产品推荐
相关产品推荐

