android - Flutter - 处理设备方向:布局旋转但下一个自动返回到纵向
问题描述
我在Flutter中有一个简单的页面,我需要管理方向,如果纵向或横向更改布局。
我做了什么:
在我的小部件中,我为此页面添加了允许的方向:
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
DeviceOrientation.landscapeLeft,
DeviceOrientation.landscapeRight
]);
var screenSize = MediaQuery.of(context).size;
final isLandscape = screenSize.width > screenSize.height;
[...]
现在在我的代码中,我能够成功地管理布局,例如使用这样的东西:
Flex(children: [
isLandscape ? Spacer() : Container(),
[...]
或Row()
/Column()
切换(如果需要)。
发生的情况是:当我将设备从纵向旋转到横向时,布局会随着动画而变化,但如果设备在转换完成后旋转,也会返回纵向。
我不知道为什么会这样。相反,如果我将方向强制为纵向或横向,则一切正常:
SystemChrome.setPreferredOrientations([
DeviceOrientation.landscapeLeft,
DeviceOrientation.landscapeRight
]);
这是 iOS 上的行为,这些是 iOS 设置:
相反,在 Android 上,不旋转。
为什么会这样?我能做些什么来避免这种情况?
编辑 1:
在@PeterKoltai建议之后,我使用过OrientationBuilder
; 没关系,旋转设备旋转成功。
仅当在上一页setPreferredOrientations
中强制进行纵向时,才会出现此处描述的问题。
如果我为每页使用 4 个方向,完全没有问题,但所有页面都会旋转......
当然,我需要允许某些页面旋转,其他必须只是肖像。
解决方案
推荐阅读
- flutter-web - flutter web:使用中文字符串时出现乱码怎么解决?
- node.js - 如何运行作为依赖项添加到应用程序中的私有 git 存储库的 npm 命令?
- typescript - 在 react native Expo 中显示上传文件的方式
- python - 在python中计算GCD
- reactjs - 在客户端上为动态页面(使用 CDN 缓存时)执行 SSR 和水合单页应用程序是否有意义?
- bash - CURL 上传文件名中包含 UTF-8 字符(例如 ä、ö、ü)的文件
- nlp - 有哪些方法可以更好地控制 BERT 输出?在多标签文本分类任务中增加/减少某些单词的相关性
- kubernetes - Kubernetes 上的零停机更新。当有上传文件的请求时
- python - 检索预期的 str、字节或 os.PathLike 对象时出现问题,而不是加载图像时出现 dict 错误
- reactjs - openWeatherMap API 调用失败