-
根據(jù)Widget的源碼,只要
newWidget
與oldWidget
的runtimeType
和key
同時(shí)相等時(shí)就會(huì)用newWidget
去更新Element
對(duì)象的配置,否則就會(huì)創(chuàng)建新的Element
。@immutable abstract class Widget extends DiagnosticableTree { const Widget({ this.key }); final Key key; @protected Element createElement(); @override String toStringShort() { return key == null ? '$runtimeType' : '$runtimeType-$key'; } static bool canUpdate(Widget oldWidget, Widget newWidget) { return oldWidget.runtimeType == newWidget.runtimeType && oldWidget.key == newWidget.key; } }
-
StatefulWidget也是繼承自widget類,并重寫了
createElement()
方法,不同的是返回的Element
對(duì)象并不相同;另外StatefulWidget類中添加了一個(gè)新的接口createState()
,如源碼所示:abstract class StatefulWidget extends Widget { const StatefulWidget({ Key key }) : super(key: key); @override StatefulElement createElement() => new StatefulElement(this); @protected State createState(); }