在颤动中强制纵向视图
Posted
技术标签:
【中文标题】在颤动中强制纵向视图【英文标题】: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所示。
【参考方案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】:解决方案
-
将您的代码更改为:
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(),
));
-
打开您的 Xcode 项目并转到 Target -> 部署信息 ->
Require Full Screen
到 true
。这将反映在您的 ios/Runner/Info.plist 中以具有以下值:
<key>UIRequiresFullScreen</key>
<true/>
说明
这里有几点需要说明:
-
你忘记了
WidgetsFlutterBinding.ensureInitialized()
。这很重要,因为您是异步 main
方法上的“awaiting”。
根据setPreferredOrientations
的文档,iPad 多任务处理存在限制:
只有在 iPad 上启用多任务处理时,才会采用此设置 已禁用。
为了缓解 #2,来自文档:
如果您决定退出多任务处理,您可以通过以下方式执行此操作 在 Xcode 部署信息中将“需要全屏”设置为 true。
【讨论】:
以上是关于在颤动中强制纵向视图的主要内容,如果未能解决你的问题,请参考以下文章