Flutter之第一个Stateful widget

266 阅读1分钟

Stateless widgets是不可变的,这意味着它们的属性不能改变--所有的值都是final

Statefull widgets持有的状态可能在widget生命周期中发生变化,实现一个stateful widget至少需要两个类:

  • 一个StatefulWidget类
  • 一个State类

StatefulWidget类本身是不可变的,但是State类在widget生命周期中始终存在

下面添加一个stateful widget -- RandomWords,它会创建自己的状态类:_RadnomWordsState,然后将RandomWords内嵌到已有的无状态的MyApp widget

  1. 创建有状态的widget样板代码

    在lib/main.dart所有代码之后,输入stful,会提示创建Stateful widget样板代码

  2. 输入RandomWords作为有状态widget的名称

    AndroidStudio会更新widget对应的State类的名称,并将其命名为 _RandomWords ,默认情况下,State类的名称带有下划线前缀。

    Dart语言中,给标识符加上下划线前缀可以增强隐私性,并且这也是对State对象推荐的最佳实践写法

    AndroidStudio会自动将状态类(State)继承自State< RandomWords >,这表示专门用于RadndomWords的通用State类。该应用程序的大多数逻辑都位于此处——它维护RandomWords widget的状态。该类会保存生成的单词对的列表,该列表随用户滚动而无限增长。

class RandomWords extends StatefulWidget {
  const RandomWords({ Key? key }) : super(key: key);

  @override
  _RandomWordsState createState() => _RandomWordsState();
}

class _RandomWordsState extends State<RandomWords> {
  @override
  Widget build(BuildContext context) {
    return Container();
  }
}
  1. 更新 _RandomWordsState中的build()方法
class _RandomWordsState extends State<RandomWords> {
    @override
    Widget build(BuildContext context) {
      final wordPair = WordPair.random();
      return Text(wordPair.asPascalCase);
    }
  }

4.将RaddomWords内嵌到MyApp中

...
    body:  const Center(
      child: RandomWords(),
    ),
...