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

问题

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

解决方案

  • 把Scaffold段代码抽取出来:

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

探究BuildContext

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

回顾问题

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

结尾

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

    原文作者:wangshuaiyu
    原文地址: https://segmentfault.com/a/1190000017926507
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞