详解Flutter的setState更新原理和流程
在Flutter中,setState
是 State 类的一个方法,用于标记当前对象的状态为“脏”并要求框架重新调用 build
方法以更新用户界面。setState
是更新UI的主要方式,它会触发State对象的重建。
setState
的更新流程如下:
- 调用
setState
方法。 - Flutter框架检测到状态被标记为“脏”。
- Flutter框架调用
setState
方法所在对象的build
方法。 build
方法返回一个新的Widget树。- Flutter框架比较新旧Widget树之间的差异。
- 根据差异,Flutter框架只更新必要的部分,以最小化UI重绘的影响。
示例代码:
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
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),
), // This trailing comma makes auto-formatting nicer for build methods.
);
}
}
在这个例子中,每次点击浮动按钮时,_incrementCounter
方法会被调用,这个方法内部调用 setState
来更新 _counter
变量,并触发UI的更新。
评论已关闭