Stateless widgets是不可变的,这意味着它们的属性不能改变--所有的值都是final
Statefull widgets持有的状态可能在widget生命周期中发生变化,实现一个stateful widget至少需要两个类:
- 一个StatefulWidget类
- 一个State类
StatefulWidget类本身是不可变的,但是State类在widget生命周期中始终存在
下面添加一个stateful widget -- RandomWords,它会创建自己的状态类:_RadnomWordsState,然后将RandomWords内嵌到已有的无状态的MyApp widget
-
创建有状态的widget样板代码
在lib/main.dart所有代码之后,输入stful,会提示创建Stateful widget样板代码
-
输入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();
}
}
- 更新 _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(),
),
...