1 performRebuild
1.1 调用Build ,根据不同的实现调用不同,比如StatelessWidget.build 以及
StatelessWidget.build
StatelessElement 调用 Widget.build();
StateFulElement 调用 State.build();
1.2 设置_dirty 为false
1.3 执行_child = updateChild(Element? child, Widget? newWidget, Object? newSlot);
1.3.1 第一次 child 应该为null,newWidget 为新构建的widget。
1.3.2 如果 newWidget 为null ,并且child 不为null,代表要移除 child。执行deactivateChild(child);
1.3.3 如果child为null,执行inflateWidget(),已分析。
1.3.4 如果child 不为null , 并且newWidget 不为null。
1.3.4.1 hasSameSuperclass 代表 child 与newWidget 是否都是 stateless 或者 stateful。
1.3.4.2 hasSameSuperclass && child.widget == newWidget 这个代表 widget 没有新建。只更新 child 的 _slot,设置 newChild = child;
1.3.4.3 hasSameSuperclass && Widget.canUpdate(child.widget, newWidget)
如果Widget 类型没改变,执行child.update(newWidget);设置newChild = child;
1.3.4.4 否则执行 deactivateChild(child); 并且用 newWidget 生成新的Element newChild = inflateWidget(newWidget, newSlot);
1.4 如果更新出错,兜底措施_child = updateChild(null, built, slot);使用built 生成新的Element。
子类不同操作不同:
2 StatefulElement
if(_didChangeDependencies) state.didChangeDependencies();
_didChangeDependencies 默认是false。
3 RenderObjectElement
执行 widget.updateRenderObject(this, renderObject);
设置 _dirty = false。
flutter声明周期相关 performRebuild
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 参考:大灰狼的小绵羊哥哥[https://blog.csdn.net/sinat_17775997]Flutter...
- 老孟导读:关于生命周期的文章共有2篇,一篇(此篇)是介绍 Flutter 中Stateful 组件的生命周期。第二...