Flutter. 切换到横屏后自动返回竖屏

3
在主菜单屏幕上,我调用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(),则游戏板屏幕不会切换回纵向。但我仍然无法找出原因!
干杯!
1个回答

3

哇。我想我已经搞明白了。在build()方法内调用了forcePortraitforceLandscape方法。显然,在推至Board屏幕后,Main Menu屏幕又重新运行了build()方法,并且在Board屏幕之后这样做,因此forcePortraitforceLandscape之后被调用。

解决方案是将它们移到只被调用一次的initState方法中。现在,我遇到了另一个问题,即在点击返回并返回菜单屏幕时,它不会调用initState,屏幕仍保持在纵向模式,但这是以后的工作。

总之,这是一个有趣的机制,我不知道会发生这样的事情。

免责声明:我只使用Flutter两周。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接