繁体   English   中英

Flutter - Navigator 的“parent != 'null' is not true”错误

[英]Flutter - 'parent != 'null' is not true' error for Navigator

我写了一个检查,如果条件为真,然后导航到下一页。 但是,每当该条件返回 true 并且我打算导航时,我都会收到错误消息

class BuyTickets extends StatefulWidget {

  @override
  _BuyTicketsState createState() => new _BuyTicketsState();
}

class _BuyTicketsState extends State<BuyTickets> {

  @override
  void initState(){    
    ...
    if(condition){    
      //Skip to next page
      Navigator.push( 
        context,
        MaterialPageRoute(
          builder: (BuildContext context) => SelectSeat(data: widget.data)
        )
      );
    }

    super.initState();
  }    

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
       ...
    )
  }

错误:

在此处输入图片说明

请问我该如何解决?

它抱怨说它找不到父对象,因为与小部件关联的渲染对象没有完全创建和安装。

在所有这些情况下,您需要将调用延迟到渲染对象安装的那一刻。 一种方法是在第一帧之后执行它。

  @override
  void initState() {
    super.initState();

    if(condition){
      WidgetsBinding.instance.addPostFrameCallback((_) async {
        Navigator.push(
            context,
            MaterialPageRoute(
                builder: (BuildContext context) => SelectSeat(data: widget.data)
            )
        );
      });
    }
  }

您无法在initState()build()等生命周期函数中导航。 您可以将您的登录名放在async函数中或使用Future.delayed或类似的东西。

@override
void initState(){  
  super.initState();  
  ...
  if(condition){    
    skipToNextPage();
  }
}        

void skipToNextPage() async {
  Navigator.push( 
    context,
    MaterialPageRoute(
      builder: (BuildContext context) => SelectSeat(data: widget.data)
    )
  );
}

我很久以前写过一篇评论,我建议延迟一秒开始操作,实际上是错误的。 我们需要做的是初始化变量,对于任何依赖于另一个的操作,我们必须等待图形创建,只需输入:

@override
void initState() {
super.initState();
//here you can init your variables

  WidgetsBinding.instance.addPostFrameCallback((_) async {
    //All dynamic operations that will impact on graphics 
  });
 }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM