在Flutter中,setState()
通常用于在主线程中更新UI
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('异步函数完成后调用setState()')),
body: AsyncDemo(),
),
);
}
}
class AsyncDemo extends StatefulWidget {
@override
_AsyncDemoState createState() => _AsyncDemoState();
}
class _AsyncDemoState extends State<AsyncDemo> {
String data = '加载中...';
void fetchData() async {
// 模拟异步操作,例如从API获取数据
await Future.delayed(Duration(seconds: 2));
// 异步操作完成后,调用setState()更新UI
setState(() {
data = '数据加载完成';
});
}
@override
Widget build(BuildContext context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(data),
SizedBox(height: 20),
ElevatedButton(
onPressed: fetchData,
child: Text('获取数据'),
),
],
),
);
}
}
在这个示例中,我们在_AsyncDemoState
中定义了一个名为fetchData
的异步函数。这个函数模拟了一个耗时的异步操作,例如从API获取数据。当异步操作完成后,我们调用setState()
更新data
变量的值,这将触发UI的刷新,并显示新的数据。
fetchData
函数被绑定到一个ElevatedButton
的onPressed
事件,当用户点击按钮时,fetchData
函数将被调用,从而触发异步操作。
领取专属 10元无门槛券
手把手带您无忧上云