在 Flutter 中,Future 是处理异步操作的核心机制,用于表示一个可能需要一段时间才能完成的操作,并在完成后返回结果。
基本概念
异步操作:不会立即返回结果的操作(如网络请求、文件读写)。
- 未完成(pending):操作正在进行中。
- 已完成(completed):操作成功并返回结果(Future<T>)。
- 已失败(errored):操作失败并抛出错误。
创建 Future
使用async/await
Future<String> fetchData() async {
// 模拟网络请求延迟
await Future.delayed(Duration(seconds: 2));
return 'Hello, World!';
}
使用构造函数
// 立即完成的Future
Future<String> immediateFuture = Future.value('立即完成');
// 延迟完成的Future
Future<void> delayedFuture = Future.delayed(
Duration(seconds: 1),
() => print('延迟1秒后执行'),
);
// 异步错误处理
Future<void> errorFuture = Future.error('这是一个错误');
处理 Future 结果
使用then和catchError
fetchData()
.then((value) => print('结果: $value')) // 成功回调
.catchError((error) => print('错误: $error')) // 错误回调
.whenComplete(() => print('操作完成')); // 最终回调
使用async/await(更简洁的语法)
void main() async {
try {
final result = await fetchData();
print('结果: $result');
} catch (e) {
print('错误: $e');
} finally {
print('操作完成');
}
}
组合多个 Future
串行执行(按顺序执行)
Future<void> sequentialTasks() async {
final result1 = await task1();
final result2 = await task2(result1);
return task3(result2);
}
并行执行(同时执行多个 Future)
Future<void> parallelTasks() async {
final results = await Future.wait([task1(), task2(), task3()]);
print('所有任务完成: $results');
}
任意一个完成即返回
Future<void> raceTasks() async {
final firstResult = await Future.any([slowTask(), fastTask()]);
print('第一个完成的任务: $firstResult');
}
Completer(自定义 Future)
将非 Future API 转换为 Future。
Future<String> fetchData() {
final completer = Completer<String>();
// 模拟异步操作(如回调式API)
someAsyncOperation(
onSuccess: (data) => completer.complete(data),
onError: (error) => completer.completeError(error),
);
return completer.future;
}