本文主要是介绍Flutter 理解之 BuildContext,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
刚开始 接触flutter 时,我以为buildContext 就是类似于Android的上下文一下,但是大错特错,
比如 压一个新的页面到屏幕上
Navigator.of(context).push
比如把路由顶层的页面移除
Navigator.of(context).pop
其实buildContext 就是就是一个抽象类,其中有两个方法,一个是返回一个weight 一个是返回buildOwner
但是flutter 如何构建视图呢,我们认为一切皆weight ,我们通过构建嵌套weight 来编写UI界面,
但是weight 并不是真正显示在屏幕上的东西,他只是配置信息而已。他总是不可变的,并且可在多出复用的
那真正显示在视图上的是什么呢,那就是视图树 element tree。
以statelessweight为例
StatelessWidget 继承 weight 里面一个重写方法createElement返回 StatelessElement
StatelessElement 继承 ComponentElement 里面有build 方法 updata 更新方法 传入this
ComponentElement 继承 Element
Element 实现 BuildContext
BuildContext对象实际上就是Element对象,BuildContext 接口用于阻止对 Element 对象的直接操作
视图树装载过程
StatelessWidget
首先它会调用StatelessWidget的 createElement 方法,并根据这个widget生成StatelesseElement对象。
将这个StatelesseElement对象挂载到element树上。
StatelesseElement对象调用widget的build方法,并将element自身作为BuildContext传入。
StatefulWidget
首先同样也是调用StatefulWidget的 createElement方法,并根据这个widget生成StatefulElement对象,并保留widget引用。
将这个StatefulElement挂载到Element树上。
根据widget的 createState 方法创建State。
StatefulElement对象调用state的build方法,并将element自身作为BuildContext传入。
所以我们在build函数中所使用的context,正是当前widget所创建的Element对象。
更详细介绍
https://juejin.im/post/6844903777565147150
这篇关于Flutter 理解之 BuildContext的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!