flutter:锁定屏幕时识别方向

Mat*_*kao 2 dart flutter

尝试用谷歌搜索会产生数千篇不相关的文章,例如设置或锁定特定方向。

我的问题是,虽然手机的方向被锁定为纵向模式,但屏幕转向侧面,有没有办法检测到这种转变并调整屏幕上的小部件作为响应?

就像是

if (MediaQuery.of(context).orientation == Orientation.portrait) {
      return Text('text', style: TextStyle(fontSize: 200));
    } else {
      return Text('flipped text', style: TextStyle(fontSize: 200));
    }
Run Code Online (Sandbox Code Playgroud)

不起作用。同样的事情OrientationBuilder- 这些似乎取决于手机认为它所处的模式。

我看到有传感器包,我确信我最终能让它工作,但这有点像用火箭筒杀死蚊子。我希望在尝试用谷歌搜索这个问题时我错过了一些简单的事情。

Mat*_*kao 6

好吧,毕竟使用传感器包并不困难。只需使用accelerometer值的第二个坐标并比较它是否大于〜4(我假设这是m/s^2,因为静止值是〜9)。

所以添加的代码是这样的:

class _SampleScreenState extends State<SampleScreen> {
  //...
  List<double> _accelerometerValues;
  List<StreamSubscription<dynamic>> _streamSubscriptions =
      <StreamSubscription<dynamic>>[];

  //...

  void initState() {
    //...

    _streamSubscriptions
        .add(accelerometerEvents.listen((AccelerometerEvent event) {
      setState(() {
        _accelerometerValues = <double>[event.x, event.y, event.z];
      });
    }));
  }

  //...

  sampleWidget() {
    if (_accelerometerValues[1] > 4) {
      return Text('portrait');
    } else {
      return Text('landscape');
    }
  }

  //...
Run Code Online (Sandbox Code Playgroud)

我可能会为此添加一些滞后以使其更清晰,但这是一个可行的解决方案。