Sobes.tech
Junior

K čemu slouží streamy ve Flutteru?

sobes.tech AI

Odpověď od AI

Streamy ve Flutteru se používají k zpracování sekvencí asynchronních událostí.

Hlavní případy použití:

  1. Reakce na změny dat: Redux, vzory BLoC používají streamy k řízení stavu aplikace a reaktivní aktualizaci UI při změnách.
  2. Práce s daty v proudu: Získávání dat přes síť (například WebSocket), čtení ze souborů, práce se senzory zařízení.
  3. Zpracování interakcí uživatele: Sledování rolování, Draggable / DragTarget.
  4. Asynchronní operace: Spouštění úkolů na pozadí a získávání výsledků, jakmile jsou připraveny.

Klíčové pojmy:

  • Stream: Sekvence asynchronních událostí. Stream může emitovat 0 nebo více událostí a poté skončit (úspěšně nebo chybou).
  • StreamSubscription: Představuje odběr na stream. Umožňuje přijímat události ze streamu a spravovat odběr (pozastavit, pokračovat, zrušit).
  • Sink: Používá se k přidávání dat do streamu.
  • StreamBuilder: Widget, který se přestavuje při přijímání nových dat ze streamu.
// Příklad použití 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('Čekání...');
      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}');
    }
  },
)
// Příklad jednoduchého streamu, který emituje čísla
Stream<int> countStream(int max) async* {
  for (int i = 0; i <= max; i++) {
    await Future.delayed(Duration(seconds: 1));
    yield i; // Emise hodnoty
  }
}