在一个界面中(widget)试图通过按钮的点击(onTap 或者onPress)进入另外一个widget(界面)
代码如下

运行app 就会出现如标题一样的错误
二 、原因解析
通过debug 在Navigator.of(context)处打断点,进入Navigator.dart里 直接上图

再深入一层
在这里可以看到,有一个while循环一直向上获取_parent

如上 ancestor已经为root,再获取_parent 为null,因此在Navigator.dart的of方法里 直接抛出error
三 、解决方案
通过原因解析,可知是context的原因 context不能为用户构建widget最根部的context(在demo中 即MyHello)
因此调整代码如下

如上 新创建了widget Home作为body 在build Home的过程中 按钮的点击 Navigator.of(context) 此处的context为Home,在framework.dart ancestorStateOfType方法中的 while循环中 会有一级它的_parent.state 为NavigatorState
四、 总结
The context used to push or pop routes from the Navigator must be that of a
widget that is a descendant of a Navigator widget.
网友评论