flutter中state详解
在Flutter中,State
是用于维护widget状态的类。每个widget都有对应的State类,这个类用于保存和widget相关的状态数据。当widget的状态发生改变时,可以调用setState()
方法来通知Flutter框架状态已经改变,需要重新构建widget。
StatefulWidget
是有状态的widget,它通过其State
对象来管理状态。每当一个StatefulWidget
第一次被插入到widget树中时,Flutter会创建其对应的State
对象。如果这个widget以后从树中移除并重新插入,Flutter不会重新创建StatefulWidget
实例,而是调用State
对象上的dispose
方法来清理旧的状态,并创建新的State
对象来维护新的状态。
以下是一个简单的示例,展示了如何使用StatefulWidget
和其State
来管理一个简单的计数器应用:
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: CounterPage(),
);
}
}
class CounterPage extends StatefulWidget {
@override
_CounterPageState createState() => _CounterPageState();
}
class _CounterPageState extends State<CounterPage> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Counter App'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headline4,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: Icon(Icons.add),
),
);
}
}
在这个例子中,CounterPage
是一个StatefulWidget
,它有一个对应的_CounterPageState
状态类。_incrementCounter
方法用于增加计数器的值,并通过调用setState()
来通知Flutter状态已经改变,需要重新构建widget树。build
方法则负责构建UI界面。
评论已关闭