在Flutter中,使用async/await处理异步操作非常简单,主要涉及以下步骤:
1. 声明异步函数
在函数声明前添加async关键字:
Future<void> fetchData() async {
// 异步操作
}
2. 使用await等待异步结果
在异步操作前添加await关键字:
Future<String> getUserData() async {
// 模拟网络请求
var response = await http.get(Uri.parse('https://api.example.com/user'));
return response.body;
}
3. 错误处理
使用try-catch捕获异常:
Future<void> loadData() async {
try {
var data = await getUserData();
print(data);
} catch (e) {
print('Error: $e');
}
}
4. 在Flutter中的实际应用
class MyWidget extends StatelessWidget {
Future<String> _fetchData() async {
await Future.delayed(Duration(seconds: 2)); // 模拟延迟
return 'Data loaded';
}
@override
Widget build(BuildContext context) {
return FutureBuilder<String>(
future: _fetchData(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator();
}
if (snapshot.hasError) {
return Text('Error: ${snapshot.error}');
}
return Text('Data: ${snapshot.data}');
},
);
}
}
5. 并行执行多个异步任务
使用Future.wait:
Future<void> loadMultipleData() async {
var results = await Future.wait([
getUserData(),
getPosts(),
getSettings()
]);
print('All data loaded: $results');
}
关键要点:
async函数返回Future对象
await只能在async函数中使用
- 使用
FutureBuilder在UI中处理异步状态
- 记得处理异常情况
这样就能在Flutter中优雅地处理异步操作,避免回调地狱,保持代码清晰易读。