Sobes.tech
Middle

Por que a função assíncrona não retorna imediatamente o tipo especificado?

sobes.tech IA

Resposta da IA

Uma função assíncrona no Flutter/Dart não devolve imediatamente o tipo especificado porque realiza uma operação que pode levar tempo (por exemplo, uma requisição de rede, leitura de ficheiro). Em vez de bloquear o thread de execução até que a operação termine, a função assíncrona devolve imediatamente um Future.

Future é um objeto que representa um valor potencial ou um erro que estará disponível no futuro. Funciona como uma promessa de que a operação será concluída, e assim que isso acontecer, o resultado será ou o valor do tipo especificado ou um erro.

O uso de Future permite que o thread principal de execução (o isolamento principal) continue a processar outras tarefas sem esperar que a operação assíncrona termine. Quando a operação termina, Future notifica isso, e o código registado (por exemplo, através de .then() ou await) pode tratar o resultado.

Exemplo:

Future<String> fetchData() async {
  // Simulação de uma operação longa
  await Future.delayed(Duration(seconds: 2));
  return "Dados recebidos!";
}

void main() {
  print("Início");
  fetchData().then((data) {
    print(data); // Será executado após a conclusão do Future
  });
  print("Fim"); // É executado imediatamente, sem esperar por fetchData
}

A saída deste código será:

Início
Fim
Dados recebidos!

Isto demonstra um comportamento não bloqueante. Se fetchData devolvesse uma String imediatamente, o programa ficaria bloqueado por 2 segundos antes de imprimir "Fim". Future permite evitar esse bloqueio.