Sobes.tech
Junior

Comment fonctionne le mot-clé await en programmation asynchrone sur Flutter?

sobes.tech IA

Réponse de l'IA

Le mot-clé await est utilisé dans les fonctions asynchrones (marquées par le mot-clé async) pour suspendre l'exécution de la fonction jusqu'à ce que le Future se termine et renvoie un résultat.

Principe de fonctionnement :

  1. Lorsque l'exécution atteint la ligne avec await, la fonction en cours est suspendue.
  2. Le contrôle revient au code appelant (ou à la boucle d'événements), permettant à d'autres parties du programme de s'exécuter. Cela empêche de bloquer l'interface utilisateur.
  3. Lorsque le Future référencé par await se termine (c'est-à-dire, effectue son opération asynchrone et renvoie une valeur ou lance une exception), la fonction suspendue reprend là où elle a été interrompue.
  4. Si le Future s'est terminé avec succès, la valeur renvoyée par le Future devient le résultat de l'expression await.
  5. Si le Future s'est terminé avec une erreur (a lancé une exception), cette exception sera levée à l'endroit où await a été appelé.

Exemple :

// Fonction asynchrone marquée avec async
Future<String> fetchData() async {
  // Simulation d'une opération asynchrone (par exemple, une requête réseau)
  await Future.delayed(Duration(seconds: 2));
  return 'Données reçues du réseau!';
}

void main() async {
  print('Début de la récupération des données...');

  // Utilisation de await pour attendre la fin du Future
  try {
    String data = await fetchData();
    print('Reçu : $data');
  } catch (e) {
    print('Erreur lors de la récupération des données : $e');
  }

  print('Programme terminé (même si await peut encore être en cours)');
}

Dans cet exemple, main est marquée comme async pour utiliser await. L'appel à await fetchData() suspend l'exécution de main pendant 2 secondes, sans bloquer le fil principal de l'interface utilisateur. Pendant que fetchData attend, d'autres parties de l'application peuvent continuer à fonctionner. Une fois que fetchData se termine, l'exécution de main reprend, et la variable data reçoit la valeur renvoyée.