自定义 Flutter 中特定小部件的旋转行为

问题描述 投票:0回答:1

在我的 Flutter 应用程序中,我使用

OrientationBuilder
小部件根据当前方向更改布局。

但是当小部件改变位置时发生的动画看起来并不流畅,并且 UI 元素的缩放暂时变得很奇怪。

有没有办法实现方向改变,使元素保持在其位置并自行旋转?

当前行为:

首选行为:

我在 flutter 应用程序中省略了相机屏幕,因为这仅涉及屏幕控件。相机视图本身不是问题!

flutter dart flutter-layout
1个回答
1
投票

我也遇到了同样的问题,相机预览旋转工作很奇怪。我最终做的是使用这个包nativeorientation,它提供以下API:

Stream<NativeDeviceOrientation> onOrientationChanged(useSensor: false)
,即使您使用以下方式锁定屏幕,也会触发方向更改:
SystemChrome.setPreferredOrientations()

基本上在组件的初始化中:

_orientation = NativeDeviceOrientationCommunicator()
        .onOrientationChanged(useSensor: true)
        .listen((event) {
      switch (event) {
        case NativeDeviceOrientation.portraitUp:
        case NativeDeviceOrientation.unknown:
          _actualOrientation = DeviceOrientation.portraitUp;
          break;
        case NativeDeviceOrientation.portraitDown:
          _actualOrientation = DeviceOrientation.portraitDown;
          break;
        case NativeDeviceOrientation.landscapeLeft:
          _actualOrientation = DeviceOrientation.landscapeLeft;
          break;
        case NativeDeviceOrientation.landscapeRight:
          _actualOrientation = DeviceOrientation.landscapeRight;
          break;
      }
    });

然后使用实际方向来动画图标或了解捕获图像的实际方向。

记得在处置时关闭订阅

_orientation.cancel();

© www.soinside.com 2019 - 2024. All rights reserved.