Sobes.tech
Junior

Como funciona a palavra-chave await na programação assíncrona no Flutter?

sobes.tech IA

Resposta da IA

A palavra-chave await é usada em funções assíncronas (marcadas com a palavra-chave async) para pausar a execução da função até que o Future seja concluído e retorne um resultado.

Princípio de funcionamento:

  1. Quando a execução chega à linha com await, a função atual é suspensa.
  2. O controlo retorna ao código que chamou (ou ao loop de eventos), permitindo que outras partes do programa sejam executadas. Isto evita bloquear a interface do utilizador.
  3. Quando o Future ao qual await se refere é concluído (ou seja, realiza a sua operação assíncrona e devolve um valor ou lança uma exceção), a função suspensa retoma de onde foi interrompida.
  4. Se o Future foi concluído com sucesso, o valor devolvido pelo Future torna-se o resultado da expressão await.
  5. Se o Future terminou com um erro (lançou uma exceção), essa exceção será lançada no local onde await foi chamado.

Exemplo:

// Função assíncrona marcada com async
Future<String> fetchData() async {
  // Simulação de uma operação assíncrona (por exemplo, uma requisição de rede)
  await Future.delayed(Duration(seconds: 2));
  return 'Dados recebidos da rede!';
}

void main() async {
  print('Início da obtenção de dados...');

  // Uso de await para esperar a conclusão do Future
  try {
    String data = await fetchData();
    print('Obtido: $data');
  } catch (e) {
    print('Erro ao obter dados: $e');
  }

  print('Programa concluído (embora o await ainda possa estar a ser executado)');
}

Neste exemplo, main está marcada como async para usar await. A chamada await fetchData() pausa a execução de main por 2 segundos, sem bloquear a thread principal da interface do utilizador. Enquanto fetchData espera, outras partes da aplicação podem continuar a funcionar. Assim que fetchData termina, a execução de main retoma, e a variável data recebe o valor devolvido.