StatelessWidget StatefulWidget和Element关系

StatelessWidget StatefulWidget和Element关系.

  1. StatelessWidget继承Widge,实现了Widget的createElement接口
@override
StatelessElement createElement() => StatelessElement(this);

在这个接口实现中,返回了一个 StatelessElement 对象,并将StatelessWidget对象传给了StatelessElement对象(这就是将widget配置来生成element),这里可以看到widget与element是相互包含的。

  1. 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对象


  1. StatefulWidget涉及到了widget、element、state。

StatefulWidget与StatelessWidget类似,继承Widge,通过实现createElement将widget对象传给element

 @override
 StatefulElement createElement() => StatefulElement(this);

在element之中有state成员变量,这时就将element与state建立了联系

 State _state;
 _state = widget.createState(),

所以element是一个桥梁,将widget、state联系了起来

 _state._element = this;
 _state._widget = widget;

你可能感兴趣的:(StatelessWidget StatefulWidget和Element关系)