Flutter部件Widget和BuildContext上下文环境的关系

32次阅读

共计 514 个字符,预计需要花费 2 分钟才能阅读完成。

问题
关于路由跳转页面遇到一个跳转失败的问题,log 日志报“Navigator operation requested with a context that does not include a Navigator.”代码如下:

解决方案
把 Scaffold 段代码抽取出来:

探究 BuildContext

上下文对象是整个 APP Widget 树结构中的 Widget 话柄,每个 Wideget 对应的都有属于自己的 BuildContext。BuildContext 还提供了一组方法,这些方法能够在 StatelessWidget.build 函数中被当前的上下文环境调用。比如 Navigator.pushNamed(context, ‘/’);
当部件 Widget 在 StatelessWidget.build 函数被返回时,这个部件会成为父部件。所以这意味着 StatelessWidget.build 方法中的 context 和函数内部部件 Widegt 的 context 不是同一个上下文。所以它们两个不同上下文能够调用的方法是有区别的。这就是这个问题关键的所在。

回顾问题

结尾
如有错误的地方欢迎指出,交流进步。参考文献:https://docs.flutter.io/flutt…

正文完
 0