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í:
- Reakce na změny dat: Redux, vzory BLoC používají streamy k řízení stavu aplikace a reaktivní aktualizaci UI při změnách.
- 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í.
- Zpracování interakcí uživatele: Sledování rolování, Draggable / DragTarget.
- 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
}
}