Flutter-导航器出现'parent!='null'is not true'错误

时间:2018-09-28 16:29:27

标签: android ios dart flutter

我写了一些检查,然后在条件为真的情况下导航到下一页。但是,只要该条件返回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(
       ...
    )
  }

错误:

enter image description here

请问我该如何解决?

3 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:0)

您无法在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)
    )
  );
}

答案 2 :(得分:0)

这件事也发生在我身上。就我而言,这是一个在打开小部件时立即影响图形的操作。因此,我只将立即对图形产生影响的部分延迟了一秒钟

       @override
      Widget build(BuildContext context) {
       return ScopedModelDescendant<UserModel>(
          builder: (BuildContext context, Widget child, UserModel userModel) {
           //HERE
           Future.delayed(Duration(seconds: 1)).then((s) {
           showDialogStateSheet(context, userModel);
           });...