我想阻止我的应用程序更改其方向并强制布局坚持“肖像”。
在main.dart中,我把:
void main(){
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown
]);
runApp(new MyApp());
}
但是当我使用Android模拟器旋转按钮时,布局“跟随”新的设备方向......
我怎么解决这个问题?
由于
答案 0 :(得分:41)
导入newCString result
,然后
将package:flutter/services.dart
放在SystemChrome.setPreferredOrientations
方法中。
示例:
Widget build()
答案 1 :(得分:16)
@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());
});
}
答案 2 :(得分:14)
放入WidgetsFlutterBinding.ensureInitialized(),否则在构建时会出现错误。
import 'package:flutter/services.dart';
void main() async => {
WidgetsFlutterBinding.ensureInitialized(),
await SystemChrome.setPreferredOrientations(
[DeviceOrientation.portraitUp]), // To turn off landscape mode
runApp(MainApp())
};
答案 3 :(得分:7)
对于iOS,调用SystemChrome.setPreferredOrientations()
对我不起作用,我不得不在Xcode project中进行更改。
答案 4 :(得分:5)
只需在main.dart文件中添加以下代码即可。
var jsonschema = root.json
var newjson = {}
for (let name in jsonschema) {
if (jsonschema.children.length > 0 ) {
//add a empty object to newjson
}
}
,并记住导入services.dart文件。下面是一个例子!
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
]);
答案 5 :(得分:4)
'setPreferredOrientations'方法返回一个Future对象。 每个文档中,“ Future”表示将来将在某处可用的某些值。这就是为什么您要等到它可用后再继续使用该应用程序。因此,应使用'then'方法,根据定义,该方法“注册在Future完成时要调用的回调”。因此,您应使用以下代码:
void main() {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]).then((_) {
runApp(new App());
});
}
此外,必须导入以下文件:
'package:flutter / services.dart'
答案 6 :(得分:4)
对于人们来说,他们正在阅读此问题。 我找到的最简单的方法可以在android和ios设备上使用。
void main() {
WidgetsFlutterBinding.ensureInitialized();
SystemChrome.setPreferredOrientations(
[
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
],
).then((val) {
runApp(YourAppName());
});
}
答案 7 :(得分:3)
下面是扑扑队的官方例子。 https://github.com/flutter/samples/blob/master/veggieseasons/lib/main.dart
import 'package:flutter/services.dart' show DeviceOrientation, SystemChrome;
void main() {
WidgetsFlutterBinding.ensureInitialized();
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]);
runApp(HomeScreen());
}
答案 8 :(得分:1)
导入import'package:flutter / services.dart';
然后,将以下代码行包含在main.dart文件和main方法中,如下所示:
WidgetsFlutterBinding.ensureInitialized();
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitDown,
DeviceOrientation.portraitUp,
]);
runApp(myApp());
答案 9 :(得分:1)
从新的flutter版本以及设置preferred Orientation
开始,我们需要增加一行,即
WidgetsFlutterBinding.ensureInitialized();
因此,适用的代码是-
import 'package:flutter/services.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown
]);
runApp(MyApp());
}
答案 10 :(得分:1)
打开android / app / src / main / AndroidManifest.xml并更新此
T
使用此代码
<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">
它将适用于android。对于iOS,您可以从此页面的Xcode进行更改 https://i.stack.imgur.com/hswoe.png
答案 11 :(得分:0)
尝试
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await SystemChrome.setPreferredOrientations(
[DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]);
runApp(MyApp());
}
您还可以在android清单和ios info.plist文件中更改屏幕方向设置。
答案 12 :(得分:0)
setPreferredOrientation
返回一个Future<void>
,因此它是异步的。最易读的方法是将main
定义为异步:
Future<void> main() async {
await SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
return runApp(new MyApp());
}
答案 13 :(得分:0)
如果您正在xcode界面中进行编辑,则不会为ipad更改它。对于ipad部分,您必须从android studio中编辑info.plist文件。您可以在阵列列表中看到类似的“〜ipad”。 info.plist中有两个部分,您必须为iPhone和iPad手动对其进行编辑。
答案 14 :(得分:0)
此解决方案对我来说适用于两个不同的Android项目。无法保证它也适用于iOS。我已经阅读了所有先前的答案,并且我认为最好和最简单的解决方案是这样做:
这样,您可以避免所有可能会弄乱代码的“等待”,“异步”和“然后”
/// this is in main.dart
main(){
WidgetsFlutterBinding.ensureInitialized();
runApp(
MaterialApp(
initialRoute: '/root',
routes: {
'/root': (context) => MyApp(),
},
title: "Your App Title",
),
);
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
/// ENFORCE DEVICE ORIENTATION PORTRAIT ONLY
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown
]);
/// RUN THE APP
return MaterialApp(
home: HomeScreen(),
);
}
}
我认为this answer's update是iOS的最佳选择。
!免责声明! 我做了一些研究,显然文档here特别指出:
setPreferredOrientations method Limitations:
"This setting will only be respected on iPad if multitasking is disabled."
Here是如何从XCode禁用多任务处理(又称为“需要全屏显示”选项)
您也可以尝试this one。我还没有亲自尝试过,因为我的PC上没有iPad或XCode,但是值得一试
答案 15 :(得分:0)
在iOS情况下可以启用requires fullscreen
选项。
void main() async {
WidgetsFlutterBinding.ensureInitialized();
SystemChrome.setPreferredOrientations([
DeviceOrientation.landscapeRight,
DeviceOrientation.landscapeLeft,
]).then((_) {
runApp(MediaQuery(
data: MediaQueryData(),
child:
MaterialApp(debugShowCheckedModeBanner: false, home: LoginPage())));
});
}
答案 16 :(得分:0)
要使 SystemChrome.setPreferredOrientations
在 iPad 上运行,请在 Xcode 项目编辑器中启用“需要全屏”,或者只需在项目文件夹的 /ios/Runner/Info.plist 中添加以下行。
<key>UIRequiresFullScreen</key>
<true/>
答案 17 :(得分:0)
这个方法很简单->
SystemChrome.setPreferredOrientations(
[DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]);
答案 18 :(得分:0)
Android 有两种选择
1.写在主要
main() {
WidgetsFlutterBinding.ensureInitialized();
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp])
.then((_) {
runApp(
child: MyApp(),
);
});
}
2.从本地设置 AndroidManifest.xml
文件
iOS 也有两种选择
1.来自info.plist
将此行添加到您的 info.plist
文件
<array>
<string>UIInterfaceOrientationPortrait</string>
</array>
2.来自跑步者
从 Xcode 上的 iOS 文件夹打开您的 Runner.xcworkspace
。单击 Runner 而不是 Pods。您可以在 General>Deployment Info 上找到此选项。只是检查你想要什么
答案 19 :(得分:-4)
最好的解决方案是在MyApp()的构建方法中使用它。