首页 > 解决方案 > 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()切换(如果需要)。

发生的情况是:当我将设备从纵向旋转到横向时,布局会随着动画而变化,但如果设备在转换完成后旋转,也会返回纵向。


第 1 步 -> 肖像
在此处输入图像描述


第 2 步 -> 从肖像旋转到风景
在此处输入图像描述


第 3 步 -> 完成景观后的问题
在此处输入图像描述


我不知道为什么会这样。相反,如果我将方向强制为纵向或横向,则一切正常:

    SystemChrome.setPreferredOrientations([
      DeviceOrientation.landscapeLeft,
      DeviceOrientation.landscapeRight
    ]);

如下图所示:
在此处输入图像描述

这是 iOS 上的行为,这些是 iOS 设置:

在此处输入图像描述

相反,在 Android 上,不旋转。

为什么会这样?我能做些什么来避免这种情况?


编辑 1

@PeterKoltai建议之后,我使用过OrientationBuilder; 没关系,旋转设备旋转成功。
仅当在上一页setPreferredOrientations中强制进行纵向时,才会出现此处描述的问题。
如果我为每页使用 4 个方向,完全没有问题,但所有页面都会旋转......
当然,我需要允许某些页面旋转,其他必须只是肖像。

标签: androidiosflutterflutter-layoutflutter-animation

解决方案


推荐阅读