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

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

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

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

我怎么解决这个问题呢?

谢谢


当前回答

如果你从xcode界面编辑这个,它不会在ipad上被改变。对于ipad部分,您必须编辑信息。Plist文件从android工作室。你可以在数组列表中看到“~ ipad”。在info中有两个部分可用。Plist,你必须为iPhone和ipad手动编辑它。

其他回答

导入包:颤振/服务。飞镖,然后

放上SystemChrome。Widget build()方法中的setPreferredOrientations。

例子:

  class MyApp extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
      SystemChrome.setPreferredOrientations([
        DeviceOrientation.portraitUp,
        DeviceOrientation.portraitDown,
      ]);
      return new MaterialApp(...);
    }
  }

更新

如2019年10月更新的flutter文档中所述,此解决方案可能不适用于某些IOS设备。

他们建议通过在信息中设置UISupportedInterfaceOrientations来固定方向。请像这样

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

更多信息https://github.com/flutter/flutter/issues/27235#issuecomment-508995063

这是一个简单的方法->

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

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

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

对于人们来说,他们现在正在读这个问题。 这是我发现的最简单的方法,在android和ios设备上都适用。

 void main() {
  WidgetsFlutterBinding.ensureInitialized();
  SystemChrome.setPreferredOrientations(
    [
      DeviceOrientation.portraitUp,
      DeviceOrientation.portraitDown,
    ],
  ).then((val) {
    runApp(YourAppName());
  });
}

iOS:

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

Android:

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