Diferença entre Future e Completer no Flutter

No Flutter, Future
e Completer
são duas classes diferentes relacionadas à programação assíncrona.
A Future
representa um valor que estará disponível em algum momento no futuro. É uma operação assíncrona que será concluída em algum momento e, quando isso acontecer, retornará um valor ou um erro. Você pode usar um Future
para executar uma operação em segundo plano enquanto o aplicativo permanece respondendo ao usuário. Quando a operação estiver concluída, você poderá atualizar a IU para refletir o resultado.
A Completer
é uma maneira de criar um Future
manualmente. Ele fornece métodos para concluir ou reprovar explicitamente o futuro, permitindo que você controle quando ele termina. A Completer
é útil quando você precisa aguardar a conclusão de várias operações assíncronas e combinar seus resultados.
Aqui está um exemplo para ilustrar a diferença entre Future
e Completer
:
// 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
// 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