面试题答案
一键面试- 调用
setState
:- 当在
State
类中调用setState
方法时,会通知State
对象其内部状态发生了变化。
- 当在
State
对象标记为脏状态:setState
方法会将当前的State
对象标记为“脏(dirty)”状态。这意味着该State
对象所对应的Element
需要重新构建。
- 调度构建:
- 框架会在适当的时机调度重新构建。这个调度过程会将标记为脏状态的
Element
添加到一个队列中。
- 框架会在适当的时机调度重新构建。这个调度过程会将标记为脏状态的
- 重新构建
Element
树:- 框架会从根
Element
开始遍历Element
树,对于标记为脏状态的Element
,会调用其关联的State
对象的build
方法,生成一个新的Widget
。 - 新的
Widget
会与旧的Widget
进行比较(通过Widget.canUpdate
方法),如果可以更新,则复用旧的Element
,并更新其配置;如果不能更新,则会创建新的Element
。
- 框架会从根
- 渲染界面:
- 一旦
Element
树更新完成,框架会根据新的Element
树来更新渲染树(RenderObject
树)。 - 渲染树中的
RenderObject
会计算自身的布局和绘制信息,最终将这些信息传递给底层的渲染引擎,完成界面的重新渲染,展示更新后的UI。
- 一旦