在我的 Flutter 应用程序中,我使用
OrientationBuilder
小部件根据当前方向更改布局。
但是当小部件改变位置时发生的动画看起来并不流畅,并且 UI 元素的缩放暂时变得很奇怪。
有没有办法实现方向改变,使元素保持在其位置并自行旋转?
当前行为:
首选行为:
我在 flutter 应用程序中省略了相机屏幕,因为这仅涉及屏幕控件。相机视图本身不是问题!
我也遇到了同样的问题,相机预览旋转工作很奇怪。我最终做的是使用这个包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();