Flutter 中,Future 是一个用于处理异步操作的类。它表示一个可能尚未完成的操作,操作完成后将返回一个结果抛出一个错误。简而言之,Future处理异步编程的一种方式,它表示你正在等待某个操作(如网络请求、文件读取等)完成,并最终获得其结果。

Future 的作用

Future 主要用于异步操作,它允许在操作还没有完成时继续执行其他任务,等到操作完成后通过回调函数处理结果。

基本概念

  1. Future 是一个表示未来某个时刻可能会完成的操作(可能成功或失败)。
  2. Future 具有两种状态:

    • 未完成:表示操作还在进行中。
    • 完成:表示操作已经完成,要么成功(Future 产生一个值),要么失败(Future 抛出一个错误)。

定义Future(两种常见的模拟方式——注意区别)
1、async、await是配后Future.delayed使用,能够让代码从上到下顺序执行;

Future<String> fetchData() async {
  await Future.delayed(Duration(seconds: 2));  // 模拟延迟(例如:等待网络请求)
  return '数据加载完成';
}

2、直接用第二个参数返回,这个代码包在方法体里面;

  Future<int> fetchData() {
    return Future.delayed(Duration(seconds: 2), () {
      return ++count; // 模拟数据加载
    }); // 模拟延迟(例如:等待网络请求)
  }

如何使用 Future?

示例 1:使用 Future 和 async/await

import 'dart:async';

void main() async {
  print('程序开始');
  var result = await fetchData();  // 异步调用
  print(result);  // 输出结果
  print('程序结束');
}

Future<String> fetchData() async {
  await Future.delayed(Duration(seconds: 2));  // 模拟延迟(例如:等待网络请求)
  return '数据加载完成';
}

解释:

  • fetchData 是一个返回 Future<String> 的异步函数,表示它会在未来某个时刻返回一个字符串。
  • await 关键字让程序在等待 fetchData 完成时不阻塞主线程,而是让其他任务继续执行,等到 fetchData 完成后再继续执行。
  • Future.delayed(Duration(seconds: 2)) 模拟一个异步操作,通常是网络请求或时间延迟。
  • fetchData 执行完成时,返回 '数据加载完成',await 等待它完成并将结果赋给 result

示例 2:使用 then 和 catchError

import 'dart:async';

void main() {
  print('程序开始');
  fetchData()
    .then((result) {
      print(result);  // 输出结果
    })
    .catchError((error) {
      print('发生错误: $error');
    });
  print('程序结束');
}

Future<String> fetchData() {
  return Future.delayed(Duration(seconds: 2), () {
    return '数据加载完成';
  });
}

解释:

  • 在这个例子中,我们使用 then 来处理 Future 完成时的结果,并使用 catchError 来处理错误。
  • then 负责处理异步操作成功的结果,而 catchError 负责捕获异常。

qngyun1029
980 声望15 粉丝