我想阻止我的应用程序改变其方向,并迫使布局坚持“纵向”。

大体上是这样。省道,我放:

void main(){
  SystemChrome.setPreferredOrientations([
    DeviceOrientation.portraitUp,
    DeviceOrientation.portraitDown
  ]);
  runApp(new MyApp());
}

但当我使用Android模拟器旋转按钮时,布局“遵循”新的设备方向…

我怎么解决这个问题呢?

谢谢


当前回答

要在iPad中强制竖屏,你还必须修改关键的UISupportedInterfaceOrientations~ iPad in ios/Runner/Info.plist:

    <key>UISupportedInterfaceOrientations~ipad</key>
    <array>
            <string>UIInterfaceOrientationPortrait</string>
            <string>UIInterfaceOrientationPortraitUpsideDown</string>
    </array>

这也可以通过XCode实现。

以上将在本地工作。为了通过XCode上传到App Store,你还需要将以下内容添加到Info.plist。这也可以通过检查“目标->常规->部署信息”下的“要求全屏”来完成。

   <key>UIRequiresFullScreen</key>
   <true/>

否则你会在上传时得到一个错误。

其他回答

android有两个选项

1. 写在主

    main() {
      WidgetsFlutterBinding.ensureInitialized();
      SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp])
          .then((_) {
        runApp(
          child: MyApp(),
        );
      });
}

2. 在AndroidManifest.xml文件中设置

iOS上也有两种选择

1. 从info.plist

将这一行添加到您的信息中。plist文件

<array>
    <string>UIInterfaceOrientationPortrait</string>
</array>

2. 从跑步者 打开你的奔跑者。Xcode的iOS文件夹中的xcworkspace。点击Runner而不是Pods。您可以在“常规>部署信息”上找到此选项。看看你想要什么

在iOS情况下,可以启用“要求全屏”选项。

void main() async {
      WidgetsFlutterBinding.ensureInitialized();
      SystemChrome.setPreferredOrientations([
        DeviceOrientation.landscapeRight,
        DeviceOrientation.landscapeLeft,
      ]).then((_) {
        runApp(MediaQuery(
            data: MediaQueryData(),
            child:
                MaterialApp(debugShowCheckedModeBanner: false, home: LoginPage())));
      });
    }

iOS:

调用SystemChrome.setPreferredOrientations()对我来说不起作用,我必须在Xcode项目中更改设备方向,如下所示:

Android:

在文件android/app/src/main/AndroidManifest.xml中设置主活动的screenOrientation属性为portrait,如下所示:

这是一个简单的方法->

SystemChrome.setPreferredOrientations(
      [DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]);

放置WidgetsFlutterBinding.ensureInitialized(),否则在构建时将得到一个错误。

import 'package:flutter/services.dart';

    void main() async => {
          WidgetsFlutterBinding.ensureInitialized();
          await SystemChrome.setPreferredOrientations(
              [DeviceOrientation.portraitUp],
          ); // To turn off landscape mode
          runApp(MainApp());
        };