gpt4 book ai didi

flutter 。将屏幕更改为横向,它会自动变回纵向

转载 作者:行者123 更新时间:2023-12-02 15:51:49 26 4
gpt4 key购买 nike

在主菜单屏幕上,我调用 forcePortrait() 这是:

static Future forcePortrait() async {
await SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]);


}

然后...我从主菜单屏幕内调用以下内容:

Navigator.push(context, MaterialPageRoute(builder: (context) => ScreenBoard()));

在 Board 屏幕中,我调用 UScreen.forceLandscape() 如下

class ScreenBoard extends StatefulWidget {
@override
_ScreenBoardState createState() => _ScreenBoardState();
}

class _ScreenBoardState extends State<ScreenBoard> {
@override
Widget build(BuildContext context) {
UScreen.forceLandscape();

return Scaffold(
backgroundColor: AppColors.redBckgnd,
body: Container(

),
);
}
}

这是forceLandscape()方法

static void forceLandscape() async {
await SystemChrome.setPreferredOrientations([
DeviceOrientation.landscapeLeft,
DeviceOrientation.landscapeRight,
]);
}

我的问题是,它确实移动到新屏幕,并且确实将屏幕旋转为横向,但几秒钟后,它又将其移回到纵向。这是为什么 ?!我想不通!

编辑

我注意到,如果我不在菜单屏幕上调用 forcePortrait(),那么看板屏幕不会切换回纵向。但还是不明白为什么!

干杯!

最佳答案

哇。我想我明白了。 forcePortraitforceLandscape 方法是从 build() 方法内部调用的。显然,在推送到 Board 屏幕后,主菜单屏幕通过 build() 方法再次运行,并且它在 Board 屏幕执行后执行此操作,因此调用了 forcePortraitforceLandscape之后。

解决方案是将它们移至仅调用一次的 initState 方法。我现在遇到了另一个问题,当点击返回并返回到菜单屏幕时,它不会调用 initState 并且屏幕保持纵向,但这是稍后的工作。

无论如何,有趣的机制,我不知道发生了。

免责声明:我刚接触 Flutter 两周

关于 flutter 。将屏幕更改为横向,它会自动变回纵向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58155541/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com