Flutter设备方向

8
我想知道为什么在iOS设备上运行时,Flutter能够很好地从纵向旋转到横向,但在我的Android设备上却完全不能旋转?以下是一个“hello world”的代码示例。同样,对于这个简单的代码示例,Flutter在iOS设备上可以自动旋转,但在Android上不能旋转。更复杂的应用程序也是如此,添加了ListView或其他内容后(即iOS可以很好地旋转屏幕,而Android则不能)。我发现了一些被称为OrientationBuilderlink1)或MediaQuery.orientationlink2)的东西。但这似乎只提供了区分设备方向的能力,然后您必须相应地在代码中进行操作。这似乎是一个可能的解决方案,但我想知道为什么我必须为Android设备投入额外的工作,而不需要为iOS设备投入额外的工作?我正在寻找的是一种在Flutter下实现Android的“自动”旋转功能(就像iOS一样)。我该如何实现这一点?
这是我的“hello world”示例的两个屏幕截图。 (iOS可以自动旋转 / Android不能):

enter image description hereenter image description here

这里是Dart代码:

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter = _counter + 2;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.display1,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}
3个回答

18
感谢Jagraj Singhuser1462442的回答,我终于找到了旋转Android模拟器的方法。
仅仅通过按下CMD <-键或者通过设置菜单旋转Android模拟器是不够的,你还需要选择Android模拟器手机菜单栏上的小图标(见图中红圈)...
不知道为什么AVD要这样做...

enter image description here


1
如果您的设置中没有启用自动旋转,则只需要像在常规设备上一样执行此操作。模拟器可能会安装时禁用它,只需启用即可。 - Gábor
以防有些人感到困惑:一些模拟器可能没有它,Pixel XL 有小的旋转按钮,而Pixel 2则没有。因此,请使用Pixel XL。 - Boommeister
我已经做了这个,但是应用程序仍然无法旋转。很奇怪。 - Zenko

8

在您的手机(Android)通知面板或系统设置中,将设备方向更改为自动。 另一种方法是使用Flutter的系统Chrome库,您可以更改或设置首选方向, 也许这可以帮助,Flutter文档


谢谢Jigraj,感谢你的回答。我知道如何使用Chrome库将其修复为纵向或横向。但是一旦我有了实际设备,我会在系统设置下检查“自动”设置。在模拟器中,我没有找到这样的设置。 - iKK
1
我有一个屏幕,根据方向而改变,这节省了我数小时的痛苦。我正在使用像素仿真器,更改滑块在 设置>显示>自动旋转屏幕 中。 - its_broke_again

1

您是否在模拟器中运行Flutter?我认为安装到设备上时,旋转是自动的。您可能需要在Android模拟器设置中触发它。


是的,我正在模拟器上运行它。我手头没有实际的安卓设备。但如果你告诉我在实际设备上旋转是有效的,那就让我放心了:)。非常感谢你的回答。 - iKK
你必须在 Android 模拟器上手动触发它。请查看 Jahraj Singh 的答案。 - user1462442

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接