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

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值