颤振:如何防止设备方向改变并强制纵向?

问题描述 投票:30回答:6

我想阻止我的应用程序更改其方向并强制布局坚持“肖像”。

在main.dart中,我把:

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

但是当我使用Android Emulator旋转按钮时,布局“跟随”新的设备方向......

我该怎么解决这个问题?

谢谢

dart flutter
6个回答
52
投票

然后导入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(...);
    }
  }

21
投票

@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());
    });
}

8
投票

对于iOS,调用SystemChrome.setPreferredOrientations()对我不起作用,我不得不在Xcode project中更改它。

enter image description here


6
投票

'setPreferredOrientations'方法返回Future对象。根据文档,Future代表将来可用的某些价值。这就是为什么你要等到它可用,然后再继续申请。因此,应该使用'then'方法,根据定义,“在Future完成时注册要调用的回调”。因此,您将使用此代码:

  void main() {
  SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]).then((_) {
      runApp(new App());
    });
   }

此外,必须导入以下文件:

'包:扑/ services.dart'


1
投票

首先在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());
      });
    }

1
投票

打开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


0
投票

setPreferredOrientation返回一个Future<void>,所以它是异步的。最可读的方法是将main定义为异步:

Future<void> main() async {
  await SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
  return runApp(new MyApp());
}
© www.soinside.com 2019 - 2024. All rights reserved.