以编程方式更改方向

时间:2020-09-02 06:13:46

标签: flutter

Flutter具有一个称为setPreferredOrientations()的内置方法。据我了解,该函数锁定参数中设置的方向。相反,我只是想更改方向,但不锁定它。我的用例如下:

  • 用户可以全屏模式查看图像
  • 许多用户在其系统设置中不启用设备旋转功能
  • 为避免必须启用和禁用设备旋转以将图像旋转为横向的工作,我想使用一个“旋转”按钮来为用户旋转布局(并允许他们向后旋转),而不是无需物理旋转设备。

对此有何想法?谢谢!

3 个答案:

答案 0 :(得分:1)

我认为Apurv Jha的答案应该有用。我还认为这是从这里偷来的:Flutter: How to set and lock screen orientation on-demand

您是否尝试过:您可能想在其他地方使用initState中的代码。例如,在onPressedonTap中的小部件参数。然后创建一个指示设备是否旋转的状态。这可能是简单的布尔操作,也可能是在按下按钮时使设备旋转的某种方式。然后根据状态将方向设置为不同于状态,并更新状态。

答案 1 :(得分:0)

首先导入服务包:

导入package:flutter/services.dart;

这将使您可以访问SystemChrome

"Controls specific aspects of the operating system's graphical interface and how it interacts with the application."

加载小部件时,请执行以下操作:

@override
void initState(){
  super.initState();
  SystemChrome.setPreferredOrientations([
      DeviceOrientation.landscapeRight,
      DeviceOrientation.landscapeLeft,
  ]);
}

然后,当我离开页面时,将其恢复为正常状态:

@override
dispose(){
  SystemChrome.setPreferredOrientations([
    DeviceOrientation.landscapeRight,
    DeviceOrientation.landscapeLeft,
    DeviceOrientation.portraitUp,
    DeviceOrientation.portraitDown,
  ]);
  super.dispose();
}

答案 2 :(得分:0)

您可以使用 bool 变量标志而不是更改 dispose 方法中的 setPreferredOrientations() 参数。

每当用户单击旋转按钮时,检查变量是否默认值为 true,然后将变量设置为 false 并将方向设置为横向,如果其值不等于默认值,则将方向更改为纵向。< /p>

if(flag == true)
    SystemChrome.setPreferredOrientations([
    DeviceOrientation.portraitUp,
    DeviceOrientation.portraitDown,
  ]);
else
    SystemChrome.setPreferredOrientations([
    DeviceOrientation.landscapeRight,
    DeviceOrientation.landscapeLeft,
  ]);

并在 dispose 方法中将参数设置为默认值。