如何在按返回按钮时无法固定屏幕方向?
此处输入代码:https://github.com/iyansr/traffic-manager-master
我已经在两个页面上的void initState()的内部和外部设置了Orientation,但是当我返回首页时,屏幕方向仍然无法显示。
我希望首页始终处于potrait模式 第二页总是风景
在home.dart上
...
@override
void initState() {
super.initState();
// Set portrait orientation
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitDown,
DeviceOrientation.portraitUp,
]);
_dateTime = DateTime.parse(initDate);
}
...
在counterpage.dart(横向)上:
class _CounterPageState extends State<CounterPage> {
@override
void initState() {
super.initState();
SystemChrome.setPreferredOrientations([
DeviceOrientation.landscapeLeft,
DeviceOrientation.landscapeRight,
]);
}
...
答案 0 :(得分:1)
initState(),因为您的旧页面仍在创建但未激活。也许这里最简单的结果将在第二个屏幕的dispose()方法中称为setPrefferedOrintations()。
class _CounterPageState extends State<CounterPage> {
@override
void initState() {
super.initState();
SystemChrome.setPreferredOrientations([
DeviceOrientation.landscapeLeft,
DeviceOrientation.landscapeRight,
]);
}
@override
void dispose() {
// Set portrait orientation
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitDown,
DeviceOrientation.portraitUp,
]);
super.dispose();
}
}
答案 1 :(得分:0)
您还可以简单地在返回的任何页面的State.dispose
方法中执行SystemChrome.setPreferredOrientations
调用。这意味着Navigator
弹出页面时将设置方向。
对于您的情况,您希望在离开CounterPage
时将首选方向重新设置为横向,这意味着您必须添加以下代码:
class _CounterPageState extends State<CounterPage> {
@override
void dispose() {
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitDown,
DeviceOrientation.portraitUp,
]);
super.dispose();
}
// ...
}
如果您要从主页导航至其他页面,则这些页面还需要使用其dispose
方法将首选方向设置回potrait。
答案 2 :(得分:0)
不幸的是,在我的情况下,dispose方法无法正常工作,我所做的是在导航至横向页面时使用的'then'回调并在那里重置了我的首选方向(即纵向模式),该回调方法将在您从横向页面返回导航,从而在首页中重置了首选方向;
onTap: () {
Navigator.of(context)
.pushNamed('/horizontalModePage')
.then((_) => SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitDown,
DeviceOrientation.portraitUp,
]));