StatelessWidget构建方法特点
- 单一build方法:StatelessWidget只有一个
build
方法,该方法根据传入的Widget
的配置(final
变量)构建并返回一个Widget
树。
- 不可变:一旦创建,其状态不能改变。构建方法在相同输入下总是返回相同的
Widget
树,因为它不依赖任何可变状态。
StatefulWidget构建方法特点
- 创建State对象:StatefulWidget本身有一个
createState
方法,用于创建关联的State
对象。这个State
对象持有可变状态。
- State的build方法:关联的
State
类有一个build
方法,根据当前状态构建Widget
树。状态变化时,build
方法会被调用重新构建Widget
树。
两者不同
- 状态管理:StatelessWidget用于不需要改变状态的场景,而StatefulWidget用于状态会改变的场景。
- 重建机制:StatelessWidget在其依赖的
final
变量变化时重建;StatefulWidget在其关联的State
对象的状态变化时重建。
应用场景举例
- StatelessWidget场景:
- 显示固定文本的
Text
组件,如标题。例如一个应用的顶部固定标题栏:
class AppTitle extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Text(
'My App',
style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
);
}
}
- StatefulWidget场景:
class ClickCounter extends StatefulWidget {
@override
_ClickCounterState createState() => _ClickCounterState();
}
class _ClickCounterState extends State<ClickCounter> {
int _count = 0;
void _incrementCounter() {
setState(() {
_count++;
});
}
@override
Widget build(BuildContext context) {
return Column(
children: [
Text('You have clicked $_count times'),
ElevatedButton(
onPressed: _incrementCounter,
child: Text('Click me'),
)
],
);
}
}