Junior
Zašto se koriste streamovi u Flutteru?
sobes.tech АИ
Одговор од АИ
Stream-ovi u Flutter-u se koriste za obradu sekvenci asinhronih događaja.
Glavni slučajevi upotrebe:
- Reagovanje na promene podataka: Redux, BLoC obrasci koriste stream-ove za upravljanje stanjem aplikacije i reaktivno ažuriranje UI-a pri promenama.
- Rad sa podacima u toku: Dobijanje podataka putem mreže (npr. WebSocket), čitanje iz fajlova, rad sa senzorima uređaja.
- Obrada interakcija korisnika: Praćenje skrolovanja, Draggable / DragTarget.
- Asinhrone operacije: Izvršavanje zadataka u pozadini i dobijanje rezultata čim su spremni.
Ključni pojmovi:
- Stream: Sekvenca asinhronih događaja. Stream može emitovati 0 ili više događaja, a zatim se završiti (uspešno ili greškom).
- StreamSubscription: Predstavlja pretplatu na stream. Omogućava primanje događaja iz stream-a i upravljanje pretplatom (pauziranje, nastavak, otkazivanje).
- Sink: Koristi se za dodavanje podataka u stream.
- StreamBuilder: Widget koji se rekonstruise pri primanju novih podataka iz stream-a.
// Primer korišćenja StreamBuilder
StreamBuilder<int>(
stream: counterStream, // Vaš stream
builder: (BuildContext context, AsyncSnapshot<int> snapshot) {
if (snapshot.hasError) {
return Text('Greška: \\${snapshot.error}');
}
switch (snapshot.connectionState) {
case ConnectionState.none:
return Text('Čekanje...');
case ConnectionState.waiting:
return CircularProgressIndicator();
case ConnectionState.active:
return Text('Vrednost: \\${snapshot.data}');
case ConnectionState.done:
return Text('Stream je završen. Poslednja vrednost: \\${snapshot.data}');
}
},
)
// Primer jednostavnog stream-a koji emituje brojeve
Stream<int> countStream(int max) async* {
for (int i = 0; i <= max; i++) {
await Future.delayed(Duration(seconds: 1));
yield i; // Emituje vrednost
}
}