Flutter中Future和Completer的区别

2,006 阅读1分钟

在 Flutter 中,FutureCompleter 是两个与异步编程相关的不同类。

Future 表示将来某个时候可用的值。这是一个异步操作,将在某个时刻完成,当它完成时,它将返回一个值或一个错误。当应用程序对用户保持响应时,你可以使用 Future 在后台执行操作。操作完成后,您可以更新UI以反映结果。

Completer 是一种手动创建 Future 的方法。它提供了明确地完成或失败未来的方法,允许您控制它何时完成。当您需要等待多个异步操作完成并组合它们的结果时,Completer 非常有用。

这里有一个例子来说明 Futurecompletion 之间的区别:

// Using a Future
Future<int> fetchNumber() async {
  // Simulate a network delay
  await Future.delayed(Duration(seconds: 2));
  return 42;
}

void main() async {
  print("Start");
  final number = await fetchNumber();
  print("The answer is $number");
  print("End");
}

// Output:
// Start
// The answer is 42
// End

在这个例子中,fetchNumber 返回一个 Future<int> ,在2秒后完成。main 函数使用await 关键字等待 future 语句完成,然后输出结果。

// Using a Completer
Completer<int> fetchNumber() {
  final completer = Completer<int>();
  // Simulate a network delay
  Future.delayed(Duration(seconds: 2), () {
    completer.complete(42);
  });
  return completer;
}

void main() async {
  print("Start");
  final completer = fetchNumber();
  final number = await completer.future;
  print("The answer is $number");
  print("End");
}

// Output:
// Start
// The answer is 42
// End

在这个例子中,fetchNumber 创建了一个 Completer<int> 并返回它。完成器在2秒后完成,它的未来在 mian 函数中被等待以获得结果。


原文:medium.com/@irfanjpj19…