Junior
À quoi servent les streams dans Flutter?
sobes.tech IA
Réponse de l'IA
Les flux (streams) dans Flutter sont utilisés pour gérer des séquences d'événements asynchrones.
Cas d'utilisation principaux :
- Réagir aux changements de données : Redux, modèles BLoC utilisent des flux pour gérer l'état de l'application et mettre à jour l'interface utilisateur de manière réactive lors des changements.
- Travailler avec des données en flux : Récupération de données via le réseau (par exemple, WebSocket), lecture de fichiers, interaction avec les capteurs de l'appareil.
- Traiter les interactions utilisateur : Suivi du défilement, Draggable / DragTarget.
- Opérations asynchrones : Exécuter des tâches en arrière-plan et obtenir les résultats à mesure qu'ils sont prêts.
Concepts clés :
- Stream : Séquence d'événements asynchrones. Un flux peut émettre 0 ou plusieurs événements, puis se terminer (avec succès ou erreur).
- StreamSubscription : Représente un abonnement à un flux. Permet de recevoir des événements du flux et de gérer l'abonnement (pause, reprise, annulation).
- Sink : Utilisé pour ajouter des données au flux.
- StreamBuilder : Widget qui se reconstruit lors de la réception de nouvelles données du flux.
// Exemple d'utilisation de StreamBuilder
StreamBuilder<int>(
stream: counterStream, // Votre flux
builder: (BuildContext context, AsyncSnapshot<int> snapshot) {
if (snapshot.hasError) {
return Text('Erreur : \\${snapshot.error}');
}
switch (snapshot.connectionState) {
case ConnectionState.none:
return Text('En attente...');
case ConnectionState.waiting:
return CircularProgressIndicator();
case ConnectionState.active:
return Text('Valeur : \\${snapshot.data}');
case ConnectionState.done:
return Text('Flux terminé. Dernière valeur : \\${snapshot.data}');
}
},
)
// Exemple d'un flux simple qui émet des nombres
Stream<int> countStream(int max) async* {
for (int i = 0; i <= max; i++) {
await Future.delayed(Duration(seconds: 1));
yield i; // Émet la valeur
}
}