美文网首页
Flutter 初学

Flutter 初学

作者: TaoGeNet | 来源:发表于2019-01-31 11:28 被阅读0次

    Widget类的声明

    @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';
      }
    
      @override
      void debugFillProperties(DiagnosticPropertiesBuilder properties) {
        super.debugFillProperties(properties);
        properties.defaultDiagnosticsTreeStyle = DiagnosticsTreeStyle.dense;
      }
    
      static bool canUpdate(Widget oldWidget, Widget newWidget) {
        return oldWidget.runtimeType == newWidget.runtimeType
            && oldWidget.key == newWidget.key;
      }
    }
    

    Stateless Widget
    StatelessWidget 相对比较简单,它继承自Widget, 重写了createElement()方法

    @override
    StatelessElement createElement() => new StatelessElement(this);
    

    StatelessElement 间接继承自Element类,与StatelessWidget相对应(作为其配置数据)。

    创建自定义widget
    一般只继承 StatelessWidget StatefulWidget

    class Echo extends StatelessWidget {
      const Echo({
        Key key,  
        @required this.text,
        this.backgroundColor:Colors.grey,
      }):super(key:key);
    
      final String text;
      final Color backgroundColor;
    
      @override
      Widget build(BuildContext context) {
        return Center(
          child: Container(
            color: backgroundColor,
            child: Text(text),
          ),
        );
      }
    }
    

    按照惯例,widget的构造函数应使用命名参数,命名参数中的必要参数要添加@required标注,这样有利于静态代码分析器进行检查,另外,在继承widget时,第一个参数通常应该是Key,如果接受子widget的child参数,那么通常应该将它放在参数列表的最后。同样是按照惯例,widget的属性应被声明为final,防止被意外改变。

    Stateful Widget
    和StatelessWidget一样,StatefulWidget也是继承自widget类,并重写了createElement()方法,不同的是返回的Element 对象并不相同;另外StatefulWidget类中添加了一个新的接口createState(),下面我们看看StatefulWidget的类定义:

    abstract class StatefulWidget extends Widget {
      const StatefulWidget({ Key key }) : super(key: key);
    
      @override
      StatefulElement createElement() => new StatefulElement(this);
    
      @protected
      State createState();
    }
    

    相关文章

      网友评论

          本文标题:Flutter 初学

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