flutter widget

flutter三大金刚:widget/Element/RenderObject

一个完整的idget工作流程:

1.widget被加载时,创建出widget对应的element对象

2.element通过rederobject实现绘制(实际看到的是renderobject绘制的画面)

 

⚠️:flutter中的widget可能被多个地方使用,而单个element只会被创建一次,所以widget和element是多对一的关系。

而element和renderobject是一对一的关系。

 

element就是buildcontext的实现类

为什么要区分StatelessWidget和StatefulWidget,是因为如果widget不变,那么就使用statelesswidget。

如果widget会变化,那么每次都重新生成太消耗性能。所以flutter将可变的widget定义为statefulwidget,它由widget(ui)和state(状态)两部分构成。

其中widget负责实际的展示,state存储该widget的状态信息(在widget树中的位置/上下文等等)。

改变了页面中的数据(state中的数据),需要刷新页面,那么只需要调用setState函数。

它会调用build函数,按照state的当前数据重新生成一个widget。也就是说,state是复用的,widget始终是不可变的(因为更新直接丢弃旧的,生成新的)

这也是为什么widget里面定义变量都写成final的原因(不可变)

 

 

posted @ 2020-08-20 10:53  NeoZy  阅读(231)  评论(0编辑  收藏  举报