Flutter中ListView复用原理探索

Flutter三棵树之间的关系

众所周知flutter中有三颗非常重要的树形结构,分别为widget树,element树和renderObject树
其中widget树,存放渲染内容,只是一个数据结构。创建和销毁十分轻量,在页面的刷新过程中经常会被重建。就个人而言,可以把widget抽象的理解为一个存放配置信息的map。
element树,同时持有widget和renderObject,存放上下文信息,可以说是widget和renderObject的连接件。
renderObject树,负责layout和paint事件。
显然,相对于widget来说,element和renderObject的创建和销毁会使用相当多的资源,那么在这个整个flutter中,复用的应该是element和renderObject,而复用widget其实是个误区。

widget的创建流程

想要明确复用原理,就要先知道创建原理。举一个最简单的例子,对于app下只有一个text,那么这个text的创建流程是这样的。
根widget调用其build方法
之后会执行updateChild方法中
这里的newWidget就是text,不为空,child由于从未创建过所以为空,直接执行inflateWidget

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值