flutter之widget基础

1.基础概念

widget不仅只描述UI。widget是描述一个UI元素的配置数据;widget并不是绘制在屏幕的UI的抽象,那是Element,Widget只是描述Element的配置;一个Widget可以对应多个Element。

StatelessWidget适用于不需要维护状态的场景,通常在build方法中嵌套其它Widget来构建UI。

StatefulWidget继承自Widget类,并重写了createElement方法,而且还提供了一个新的接口createState。其中createState用于创建和Stateful widget相关的状态,如果一个stateful widget被插入到widget树的多个位置的话,那么flutter framework会调用该方法为每一个位置生成一个独立的state实例。

2.State

一个StatefulWidget类会对应一个State类,State表示的是其需要进行维护的状态。这些状态信息能够在widget build时被同步获取;State所维护的状态信息可以在widget的生命周期中被改变,当state发生变化后,可以手动调用setState来通知flutter状态发生了变化,flutter在收到通知后,会重新调用build方法构建widget树,从而达到更新UI的目的。

state有两个常用的属性,这里做个介绍:

  • 1.widget:表示和本State实例所关联的widget实例;由于State实例只会在widget第一次被插入到树中时被创建,所以State实例和widget的对应关系是动态化的,当重新构建的时候widget发生了变化的话,那么flutter会动态设置State实例的widget属性为新的widget实例;

  • 2.context:BuildContext类的一个实例,表示构建widget的上下文。

3.Widget的生命周期

  • 1.initState:当一个statewidget第一次被插入到widget树的时候会首先调用它,对于每一个state对象,flutter只会调用一次该回调,通常在这个回调中只会做一些一次性的动作。
  • 2.didChangeDependencies
  • 3.build