0Pricing
Dart Academy · Leçon

Créer des flux avec async*

Produire des événements depuis un générateur

Créer des flux avec async* est une leçon Dart Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Dart Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Dart Academy comprend 4 leçons au total.

Produire vos propres stream

Jusqu’ici, vous avez consommé des stream créés par d’autres. Vous allez maintenant les produire vous-même à l’aide d’un générateur asynchrone, la manière la plus claire d’émettre des événements.

Le mot-clé async*

Marquez une fonction avec async* pour en faire un générateur de stream. Son type de retour est un Stream et elle peut émettre des valeurs au fil du temps. 🚿

Stream<int> countTo(int n) async* {
  // body uses yield
}

yield émet une valeur

Dans une fonction async*, yield envoie une valeur dans le stream. L’exécution s’y met en pause jusqu’à ce que l’écouteur soit prêt à recevoir la suite.

Stream<int> oneTwo() async* {
  yield 1;
  yield 2;
}

yield dans une boucle

Associez yield à une boucle pour émettre de nombreuses valeurs. À chaque passage, le nombre suivant est automatiquement envoyé dans le stream.

Stream<int> countTo(int n) async* {
  for (var i = 1; i <= n; i++) yield i;
}

await dans async*

Comme la fonction est asynchrone, vous pouvez utiliser await entre deux yield. Vous pouvez ainsi récupérer des données ou attendre avant d’émettre l’événement suivant.

Stream<int> ticker() async* {
  while (true) {
    await Future.delayed(Duration(seconds: 1));
    yield DateTime.now().second;
  }
}

yield* relaie un stream

Utilisez yield* pour émettre, depuis votre générateur, chaque événement d’un autre stream. Cela insère l’intégralité de cet autre stream dans le vôtre.

Stream<int> combined() async* {
  yield* countTo(3);
  yield 99;
}

Différé jusqu’à l’écoute

Une fonction async* ne commence pas à s’exécuter tant que personne ne l’écoute. Son corps ne s’exécute que lorsque l’écouteur demande chaque valeur. ⏸️

La pause respecte l’écouteur

Si un écouteur se met en pause, le générateur se met lui aussi en pause au prochain yield. Cette régulation évite que les producteurs ne submergent les consommateurs.

Les erreurs provenant de async*

Un throw dans une fonction async* devient un événement d’erreur sur le stream. Les écouteurs peuvent l’intercepter comme n’importe quelle autre erreur de stream.

Stream<int> risky() async* {
  yield 1;
  throw 'boom';
}

Consommer votre générateur

Lisez votre stream généré de la manière habituelle avec await for. Chaque valeur émise arrive dans la boucle dans l’ordre.

await for (final n in countTo(3)) {
  print(n);
}

async* et StreamController

Pour une sortie séquentielle fondée sur la demande, async* est plus simple qu’un StreamController. Utilisez un contrôleur uniquement lorsque les événements proviennent de rappels externes.

Vérification rapide

Comment émettre une valeur depuis une fonction async* ?

Récapitulatif

Vous avez construit des stream avec async*, envoyé des valeurs avec yield, relayé des événements avec yield* et attendu entre les événements. Vous pouvez désormais consommer et produire des stream. 🎉

Questions Fréquemment Posées

La leçon « Créer des flux avec async* » est-elle gratuite ?

Oui — le texte complet de « Créer des flux avec async* » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Dart Academy, passe à CoddyKit PRO. Le cours Dart Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Créer des flux avec async* » ?

Produire des événements depuis un générateur Tu pratiques Dart Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Dart Academy ?

Aucune expérience préalable n'est requise. Dart Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Créer des flux avec async* » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Dart Academy ?

Oui. Chaque leçon Dart Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Écouter avec await for
  2. Flux uniques ou diffusés
  3. Transformer les flux : map, where, take
  4. Créer des flux avec async*
← Retour à Dart Academy