Sobes.tech
Middle

O que são construtores Future no Flutter e como usá-los?

sobes.tech IA

Resposta da IA

Os construtores Future no Flutter são usados para criar objetos Future, que representam o resultado de uma operação assíncrona que pode ser concluída no futuro. Eles ajudam a gerir o fluxo de execução do código assíncrono.

Principais construtores:

  • Future(): Cria um Future que será executado após a conclusão da microtarefa atual. Útil para agendar tarefas após o ciclo de eventos atual.

    Future(() {
      // Operação assíncrona
      print('Isto é executado após a microtarefa atual.');
    });
    
  • Future.delayed(Duration duration, [FutureOr<T> computation()]): Cria um Future que será executado após o atraso especificado. computation é uma função opcional que é executada após o atraso e retorna um valor Future.

    Future.delayed(Duration(seconds: 2), () {
      print('Isto é executado após 2 segundos.');
    });
    
  • Future.value([FutureOr<T>? value]): Cria um Future que já está concluído com o valor especificado. Se o valor for outro Future, este construtor aguardará a sua conclusão.

    Future<int>.value(123).then((value) => print('Valor é: $value'));
    
  • Future.error(Object error, [StackTrace? stackTrace]): Cria um Future que já está concluído com um erro especificado.

    Future.error('Algo correu mal').catchError((error) => print('Erro: $error'));
    
  • Future.sync(FutureOr<T> computation()): Cria um Future que realiza o cálculo de forma síncrona imediatamente. Se o cálculo retornar um Future, este construtor aguardará a sua conclusão.

    Future.sync(() {
      print('Isto executa-se de forma síncrona.');
      return 456;
    }).then((value) => print('Valor síncrono: $value'));
    

Uso de then, catchError e whenComplete para lidar com o resultado:

Future.delayed(Duration(seconds: 1), () => 'Olá, Mundo!')
    .then((result) {
      // Executa em caso de sucesso
      print(result);
    })
    .catchError((error) {
      // Executa em caso de erro
      print('Ocorreu um erro: $error');
    })
    .whenComplete(() {
      // Executa independentemente do sucesso ou erro
      print('Future concluído.');
    });