Sobes.tech
Middle

Qu'est-ce que les constructeurs Future en Flutter et comment les utiliser?

sobes.tech IA

Réponse de l'IA

Les constructeurs Future en Flutter sont utilisés pour créer des objets Future, représentant le résultat d'une opération asynchrone pouvant être exécutée à l'avenir. Ils aident à gérer le flux d'exécution du code asynchrone.

Principaux constructeurs :

  • Future() : Crée un Future qui sera exécuté après la fin de la microtâche en cours. Utile pour planifier des tâches après la fin du cycle d'événements actuel.

    Future(() {
      // Opération asynchrone
      print('Cela s'exécute après la microtâche en cours.');
    });
    
  • Future.delayed(Duration duration, [FutureOr<T> computation()]) : Crée un Future qui sera exécuté après le délai spécifié. computation est une fonction optionnelle qui s'exécute après le délai et retourne une valeur Future.

    Future.delayed(Duration(seconds: 2), () {
      print('Cela s'exécute après 2 secondes.');
    });
    
  • Future.value([FutureOr<T>? value]) : Crée un Future qui est déjà terminé avec la valeur spécifiée. Si la valeur est un autre Future, ce constructeur attendra sa complétion.

    Future<int>.value(123).then((value) => print('Valeur : $value'));
    
  • Future.error(Object error, [StackTrace? stackTrace]) : Crée un Future qui est déjà terminé avec une erreur spécifiée.

    Future.error('Quelque chose a mal tourné').catchError((error) => print('Erreur : $error'));
    
  • Future.sync(FutureOr<T> computation()) : Crée un Future qui effectue le calcul de manière synchrone immédiatement. Si le calcul retourne un Future, ce constructeur attendra sa complétion.

    Future.sync(() {
      print('Cela s'exécute de manière synchrone.');
      return 456;
    }).then((value) => print('Valeur synchrone : $value'));
    

Utilisation de then, catchError et whenComplete pour gérer le résultat :

Future.delayed(Duration(seconds: 1), () => 'Bonjour, le monde!')
    .then((result) {
      // Exécuté en cas de succès
      print(result);
    })
    .catchError((error) {
      // Exécuté en cas d'erreur
      print('Une erreur est survenue : $error');
    })
    .whenComplete(() {
      // Exécuté indépendamment du succès ou de l'erreur
      print('Future terminé.');
    });