flutter(003)有状态的StatefulWidget

为什么选择StatefulWidget呢?

  • StatelessWidget通常用来展示哪些数据固定不变的,如果数据会发生改变,我们使用StatefulWidget;
  • Flutter在设计的时候就决定了一旦Widget中展示的数据发生变化,就重新构建整个Widget
  • Flutter通过@immutable定义到Widget中的成员变量必须是final的;
    1
    2
    3
    4
    @immutable
    abstract class Widget extends DiagnosticableTree {
    // ...省略代码
    }
  • 因此通过State记录状态变化,详见StatefulWidget结构

StatefulWidget结构

  • 也就是你创建StatefulWidget时必须创建两个类:
  • 一个类继承自StatefulWidget,作为Widget树的一部分;
  • 一个类继承自State,用于记录StatefulWidget会变化的状态,并且根据状态的变化,构建出新的Widget;
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class MyStatefulWidget extends StatefulWidget {
    @override
    State<StatefulWidget> createState() {
    // 将创建的State返回
    return MyState();
    }
    }

    class MyState extends State<MyStatefulWidget> {
    @override
    Widget build(BuildContext context) {
    return <构建自己的Widget>;
    }
    }

StatefulWidget生命周期

参考

Flutter中文网
Flutter系列教程