在颤振应用每个屏幕设置不同方向造成巨大的滞后

问题描述 投票:2回答:1

我设置一个主菜单屏幕纵向放置,然后导航到一个需要是横向的第二屏幕。

这感觉就像这两种设置都互相打架,只要我设置了景观设置应用程序从瞬时响应去到2秒或屏幕滞后切换屏幕。

代码片段:

class MainMenu extends StatelessWidget {
  @override
  Widget build(BuildContext context) {

    SystemChrome.setEnabledSystemUIOverlays([]);
    SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp,]);

这就是我如何设置我的初始方向。

导航到按钮按下的下一个屏幕,如下所示:

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

class SecondScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    SystemChrome.setEnabledSystemUIOverlays([]);
    SystemChrome.setPreferredOrientations([DeviceOrientation.landscapeLeft,]);

我的第二个屏幕的方向。如果我删除的systemChrome线是响应。如果我早在添加它们,过度滞后。

是否有不同的方法,我应该使用的子屏?

多谢你们。

编辑:

试图实现从皮特以下,这将引发成堆的理论为基础的解决方案:

Another exception was thrown: inheritFromWidgetOfExactType(_InheritedTheme) or inheritFromElement() was called after dispose():

在控制台中的错误(但应用程序不会崩溃,我只看到一个崩溃转储的瞬间作为屏幕导航来回)。代码中使用:

class MainMenu extends StatefulWidget {
  @override
  _MainMenuParentState createState() => _MainMenuParentState();
}

class _MainMenuParentState extends State<MainMenu> {
  @override
  void initState() {
    super.initState();
      SystemChrome.setEnabledSystemUIOverlays([]);
      SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp,]);
  }

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

我在INITSTATE试图用未来为好,但每一次错误都完全相同。

调用Dispose在onPress:

onPressed: () {
    dispose();
    Navigator.push(
    context,
    MaterialPageRoute(builder: (context) => SecondScreen()),
);

和我一模一样的另一种方式做,我已经转换SecondScreen到statefulwidget,使用INITSTATE设置景观,并呼吁处置方式完全相同。

flutter orientation
1个回答
2
投票

不要把SystemChrome方法内部build()的任何电话。让你的屏幕来自StatefulWidget延伸。触发器内SystemChromeinitState()通话用Future

© www.soinside.com 2019 - 2024. All rights reserved.