美文网首页
StatelessWidget StatefulWidget和E

StatelessWidget StatefulWidget和E

作者: 可问春风渡江陵 | 来源:发表于2019-08-28 14:42 被阅读0次

    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<StatefulWidget> _state;
     _state = widget.createState(),
    

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

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

    相关文章

      网友评论

          本文标题:StatelessWidget StatefulWidget和E

          本文链接:https://www.haomeiwen.com/subject/zsopectx.html