StatelessWidget StatefulWidget和Element关系.
- StatelessWidget继承Widge,实现了Widget的createElement接口
@override
StatelessElement createElement() => StatelessElement(this);
在这个接口实现中,返回了一个 StatelessElement 对象,并将StatelessWidget对象传给了StatelessElement对象(这就是将widget配置来生成element),这里可以看到widget与element是相互包含的。
- StatelessWidget声明了一个build接口,这个接口由继承StatelessWidget的类来实现,而调用是由element来执行的,这个可以从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,通过实现createElement将widget对象传给element
@override
StatefulElement createElement() => StatefulElement(this);
在element之中有state成员变量,这时就将element与state建立了联系
State<StatefulWidget> _state;
_state = widget.createState(),
所以element是一个桥梁,将widget、state联系了起来
_state._element = this;
_state._widget = widget;
网友评论