我想阻止我的应用程序更改其方向并强制布局坚持“肖像”。
在main.dart中,我把:
void main(){
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown
]);
runApp(new MyApp());
}
但是当我使用Android Emulator旋转按钮时,布局“跟随”新的设备方向......
我该怎么解决这个问题?
谢谢
然后导入package:flutter/services.dart
把SystemChrome.setPreferredOrientations
放在Widget build()
方法中。
例:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]);
return new MaterialApp(...);
}
}
@boeledi,如果你想“锁定”设备方向而不允许它随着用户旋转手机而改变,这很容易设置如下,
// This did not work as requirement
void main() {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
runApp(new MyApp());
}
你必须等到
setPreferredOrientations
完成然后启动应用程序
// This will works always for lock screen Orientation.
void main() {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp])
.then((_) {
runApp(new MyApp());
});
}
对于iOS,调用SystemChrome.setPreferredOrientations()
对我不起作用,我不得不在Xcode project中更改它。
'setPreferredOrientations'方法返回Future对象。根据文档,Future代表将来可用的某些价值。这就是为什么你要等到它可用,然后再继续申请。因此,应该使用'then'方法,根据定义,“在Future完成时注册要调用的回调”。因此,您将使用此代码:
void main() {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]).then((_) {
runApp(new App());
});
}
此外,必须导入以下文件:
'包:扑/ services.dart'
首先在main.dart文件中导入它
import 'package:flutter/services.dart';
然后不要复制粘贴而不是看(记住)并在main.dart文件中写下面的代码
要以纵向模式强制:
void main() {
SystemChrome.setPreferredOrientations(
[DeviceOrientation.portraitUp,DeviceOrientation.portraitDown])
.then((_) {
runApp(MyApp());
});
}
强制横向模式:
void main() {
SystemChrome.setPreferredOrientations(
[DeviceOrientation.landscapeLeft,DeviceOrientation.landscapeRight])
.then((_) {
runApp(MyApp());
});
}
打开android / app / src / main / AndroidManifest.xml并更新它
<activity
android:name=".MainActivity"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
用这个代码
<activity
android:name=".MainActivity"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize">
它适用于Android。对于iOS,您可以从此页面https://i.stack.imgur.com/hswoe.png更改Xcode
setPreferredOrientation
返回一个Future<void>
,所以它是异步的。最可读的方法是将main
定义为异步:
Future<void> main() async {
await SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
return runApp(new MyApp());
}