【问题标题】:Force portrait view in flutter在颤动中强制纵向视图
【发布时间】:2020-05-07 00:03:21
【问题描述】:

我已尝试使用在此站点上的一个线程上找到的此代码,但所发生的只是我的应用程序加载了一个白屏。有没有更好的方法来强制纵向视图颤动?设置起来似乎很简单。

void main() async {
  ///
  /// Force the layout to Portrait mode
  ///
  await SystemChrome.setPreferredOrientations(
      [DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]);

  runApp(new MaterialApp(
    debugShowCheckedModeBanner: false,
    home: LoginScreen(),
  ));
}

【问题讨论】:

  • 您的测试设备是 Android 还是 iOS?
  • 如果你得到一个白屏,这意味着你在调用runApp之前得到一个异常。尝试调试应用时出现什么异常?
  • 它的安卓....
  • 错误是:E/flutter (27219):[错误:flutter/lib/ui/ui_dart_state.cc(157)] 未处理的异常:在绑定初始化之前访问了 ServicesBinding.defaultBinaryMessenger。跨度>
  • OP @SamCromer 主要是在问:有没有更好的方法在颤动中强制纵向视图?每个人都指出的白屏错误修复是次要的,你们不是解释为什么这是修复。此外,没有人指出通过SystemChrome 强制定向存在问题。问题在于将 iPad 的多任务标志“需要全屏”设置为非默认值 true。如我的回答below所示。

标签: flutter dart


【解决方案1】:

将代码更改为

void main() {
 WidgetsFlutterBinding.ensureInitialized();
 SystemChrome.setPreferredOrientations(
 [DeviceOrientation.portraitUp, DeviceOrientation.portraitDown])
 .then((_) => runApp(new MaterialApp(
         debugShowCheckedModeBanner: false,
         home: LoginScreen(), 
      )));
}

`

【讨论】:

    【解决方案2】:

    来自评论中的异常:

    Unhandled Exception: ServicesBinding.defaultBinaryMessenger was accessed before the binding was initialized
    

    你需要打电话

    WidgetsBinding.ensureInitialized();
    

    致电SystemChrome.setPreferredOrientations之前

    【讨论】:

      【解决方案3】:

      解决方案

      1. 将您的代码更改为:
      void main() async {
        WidgetsFlutterBinding.ensureInitialized();
      
        ///
        /// Force the layout to Portrait mode
        ///
        await SystemChrome.setPreferredOrientations(
            [DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]);
      
        runApp(new MaterialApp(
          debugShowCheckedModeBanner: false,
          home: LoginScreen(),
        ));
      }
      
      1. 打开您的 Xcode 项目并转到 Target -> 部署信息 -> Require Full Screentrue。这将反映在您的 ios/Runner/Info.plist 中以具有以下值:
          <key>UIRequiresFullScreen</key>
          <true/>
      

      说明

      这里有几点需要说明:

      1. 你忘记了WidgetsFlutterBinding.ensureInitialized()。这很重要,因为您是异步 main 方法上的“awaiting”。
      2. 根据setPreferredOrientations 的文档,iPad 多任务处理存在限制:

      只有在 iPad 上启用多任务处理时,才会采用此设置 已禁用。

      为了缓解 #2,来自文档:

      如果您决定退出多任务处理,您可以通过以下方式执行此操作 在 Xcode 部署信息中将“需要全屏”设置为 true。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-29
        • 2013-05-18
        • 2013-01-15
        • 1970-01-01
        • 1970-01-01
        • 2010-12-21
        • 1970-01-01
        • 2014-10-13
        相关资源
        最近更新 更多