Junior
A cosa servono gli stream in Flutter?
sobes.tech AI
Risposta dell'AI
Gli stream in Flutter vengono utilizzati per gestire sequenze di eventi asincroni.
Principali casi d'uso:
- Rispondere alle modifiche dei dati: Redux, pattern BLoC utilizzano gli stream per gestire lo stato dell'applicazione e aggiornare l'UI in modo reattivo quando ci sono modifiche.
- Lavorare con dati in streaming: Ottenere dati tramite rete (ad esempio, WebSocket), leggere da file, lavorare con i sensori del dispositivo.
- Gestire le interazioni dell'utente: Monitorare lo scorrimento, Draggable / DragTarget.
- Operazioni asincrone: Eseguire compiti in background e ottenere i risultati man mano che sono pronti.
Concetti chiave:
- Stream: Sequenza di eventi asincroni. Uno stream può emettere 0 o più eventi e poi terminare (con successo o errore).
- StreamSubscription: Rappresenta una sottoscrizione a uno stream. Permette di ricevere eventi dallo stream e di gestire la sottoscrizione (pausare, riprendere, cancellare).
- Sink: Usato per aggiungere dati allo stream.
- StreamBuilder: Widget che si ricostruisce quando riceve nuovi dati dallo stream.
// Esempio di utilizzo di StreamBuilder
StreamBuilder<int>(
stream: counterStream, // Il tuo stream
builder: (BuildContext context, AsyncSnapshot<int> snapshot) {
if (snapshot.hasError) {
return Text('Errore: \\${snapshot.error}');
}
switch (snapshot.connectionState) {
case ConnectionState.none:
return Text('In attesa...');
case ConnectionState.waiting:
return CircularProgressIndicator();
case ConnectionState.active:
return Text('Valore: \\${snapshot.data}');
case ConnectionState.done:
return Text('Stream terminato. Ultimo valore: \\${snapshot.data}');
}
},
)
// Esempio di uno stream semplice che emette numeri
Stream<int> countStream(int max) async* {
for (int i = 0; i <= max; i++) {
await Future.delayed(Duration(seconds: 1));
yield i; // Emette il valore
}
}