StatelessWidget StatefulWidget和Element關(guān)系.
- StatelessWidget繼承Widge,實現(xiàn)了Widget的createElement接口
@override
StatelessElement createElement() => StatelessElement(this);
在這個接口實現(xiàn)中,返回了一個 StatelessElement 對象罩扇,并將StatelessWidget對象傳給了StatelessElement對象(這就是將widget配置來生成element)桩卵,這里可以看到widget與element是相互包含的。
- StatelessWidget聲明了一個build接口弯洗,這個接口由繼承StatelessWidget的類來實現(xiàn),而調(diào)用是由element來執(zhí)行的馁筐,這個可以從StatelessElement源碼中可以看到:
@override
Widget build() => widget.build(this);
這里的widget就是通過StatelessElement(this)傳入的對象涂召,而widget.build(this)的this就是StatelessElement對象。
但是我們看到StatelessWidget聲明的接口是 Widget build(BuildContext context)敏沉,所以StatelessElement對象就是傳入的BuildContext context果正。
StatelessElement繼承自Element炎码,而Element定義為
abstract class Element extends DiagnosticableTree implements BuildContext
所以可以傳入StatelessElement對象
- StatefulWidget涉及到了widget、element秋泳、state潦闲。
StatefulWidget與StatelessWidget類似,繼承Widge迫皱,通過實現(xiàn)createElement將widget對象傳給element
@override
StatefulElement createElement() => StatefulElement(this);
在element之中有state成員變量歉闰,這時就將element與state建立了聯(lián)系
State<StatefulWidget> _state;
_state = widget.createState(),
所以element是一個橋梁,將widget卓起、state聯(lián)系了起來
_state._element = this;
_state._widget = widget;