Sobes.tech
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:

  1. Reagovanje na promene podataka: Redux, BLoC obrasci koriste stream-ove za upravljanje stanjem aplikacije i reaktivno ažuriranje UI-a pri promenama.
  2. Rad sa podacima u toku: Dobijanje podataka putem mreže (npr. WebSocket), čitanje iz fajlova, rad sa senzorima uređaja.
  3. Obrada interakcija korisnika: Praćenje skrolovanja, Draggable / DragTarget.
  4. 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
  }
}