Sobes.tech
Junior

Na čo sa používajú streamy vo Flutteri?

sobes.tech AI

Odpoveď od AI

Streamy vo Flutter sa používajú na spracovanie sekvencií asynchrónnych udalostí.

Hlavné prípady použitia:

  1. Reagovanie na zmeny v dátach: Redux, BLoC vzory používajú streamy na správu stavu aplikácie a reaktívne aktualizácie UI pri zmenách.
  2. Práca s dátami v toku: Získavanie dát cez sieť (napríklad WebSocket), čítanie zo súborov, práca so senzormi zariadenia.
  3. Spracovanie interakcií používateľa: Sledovanie rolovania, Draggable / DragTarget.
  4. Asynchrónne operácie: Vykonávanie úloh na pozadí a získavanie výsledkov, keď sú pripravené.

Kľúčové pojmy:

  • Stream: Sekvencia asynchrónnych udalostí. Stream môže emitovať 0 alebo viac udalostí a potom skončiť (s úspechom alebo chybou).
  • StreamSubscription: Predstavuje odber na stream. Umožňuje prijímať udalosti zo streamu a spravovať odber (pozastaviť, pokračovať, zrušiť).
  • Sink: Používa sa na pridanie dát do streamu.
  • StreamBuilder: Widget, ktorý sa rekonštruuje pri prijímaní nových dát zo streamu.
// Príklad použitia StreamBuilder
StreamBuilder<int>(
  stream: counterStream, // Váš stream
  builder: (BuildContext context, AsyncSnapshot<int> snapshot) {
    if (snapshot.hasError) {
      return Text('Chyba: \\${snapshot.error}');
    }
    switch (snapshot.connectionState) {
      case ConnectionState.none:
        return Text('Čaká sa...');
      case ConnectionState.waiting:
        return CircularProgressIndicator();
      case ConnectionState.active:
        return Text('Hodnota: \\${snapshot.data}');
      case ConnectionState.done:
        return Text('Stream ukončený. Posledná hodnota: \\${snapshot.data}');
    }
  },
)
// Príklad jednoduchého streamu, ktorý emituje čísla
Stream<int> countStream(int max) async* {
  for (int i = 0; i <= max; i++) {
    await Future.delayed(Duration(seconds: 1));
    yield i; // Emisie hodnoty
  }
}