
到目前为止,你已经可以:
但是一个真正的 App,绝大多数功能都涉及异步操作:
Flutter 中的异步操作核心是 Future / async / await。
一句话理解:
Future = 异步操作的结果容器
📌 类比:
就像你向朋友借钱, 你把 IOU 交给朋友 → 等待他还钱(Future)
Future<String> fetchData() {
return Future.delayed(Duration(seconds: 2), () {
return '网络数据加载完成';
});
}
Future.delayed 模拟异步延时fetchData().then((value) {
print(value); // 网络数据加载完成
});
✅ then 的作用:
void loadData() async {
String result = await fetchData();
print(result);
}
📌 注意:
await 只能在 async 修饰的函数里使用try {
String result = await fetchData();
print(result);
} catch (e) {
print('加载失败:$e');
}
📌 真实项目必须处理异常,否则 App 崩溃。
class AsyncDemo extends StatefulWidget {
@override
_AsyncDemoState createState() => _AsyncDemoState();
}
class _AsyncDemoState extends State<AsyncDemo> {
String _data = '等待加载...';
Future<String> fetchData() {
return Future.delayed(Duration(seconds: 3), () => '异步数据加载完成');
}
void loadData() async {
try {
String result = await fetchData();
setState(() {
_data = result;
});
} catch (e) {
setState(() {
_data = '加载失败';
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('异步示例')),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(_data),
SizedBox(height: 16),
ElevatedButton(
onPressed: loadData,
child: Text('加载数据'),
),
],
),
),
);
}
}
📌 点击按钮后,2~3 秒后显示异步结果 ✅ 这就是 异步更新 UI 的标准模式
❌ 忘记 async / await ❌ then 写多层回调 → 回调地狱 ❌ 异步结束不更新 UI ❌ Future 未处理异常 → 崩溃 ❌ 放在 build 里直接 await → 页面卡住
📌 建议:异步任务尽量写在 事件或 initState 中。
📌 几乎所有业务功能都离不开异步。
你已经学会:
📌 到这里为止:
你可以实现“网络请求 + 异步更新 UI”的基本功能,为后续 API 调用打下基础。
Future 管异步 async / await 写逻辑 setState 更新 UI
《Flutter 零基础入门(三十六):简单状态管理 setState —— StatefulWidget 进阶》
下一篇我们将学习:
🚀 真正掌握“动态页面”能力