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

原文链接: https://segmentfault.com/a/1190000017926507

问题

  • 关于路由跳转页面遇到一个跳转失败的问题,log日志报“Navigator operation requested with a context that does not include a Navigator.”代码如下:Flutter部件Widget和BuildContext上下文环境的关系_第1张图片

解决方案

  • 把Scaffold段代码抽取出来:

Flutter部件Widget和BuildContext上下文环境的关系_第2张图片

探究BuildContext

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

回顾问题

Flutter部件Widget和BuildContext上下文环境的关系_第3张图片
Flutter部件Widget和BuildContext上下文环境的关系_第4张图片

结尾

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

你可能感兴趣的:(Flutter部件Widget和BuildContext上下文环境的关系)