Flutter之Future简介 2025-07-07 周一

在 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;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容