Flutter具有一个称为setPreferredOrientations()
的内置方法。据我了解,该函数锁定参数中设置的方向。相反,我只是想更改方向,但不锁定它。我的用例如下:
对此有何想法?谢谢!
答案 0 :(得分:1)
我认为Apurv Jha的答案应该有用。我还认为这是从这里偷来的:Flutter: How to set and lock screen orientation on-demand。
您是否尝试过:您可能想在其他地方使用initState
中的代码。例如,在onPressed
或onTap
中的小部件参数。然后创建一个指示设备是否旋转的状态。这可能是简单的布尔操作,也可能是在按下按钮时使设备旋转的某种方式。然后根据状态将方向设置为不同于状态,并更新状态。
答案 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 方法中将参数设置为默认值。