Middle
Ako sa používajú streamy vo Flutteri?
sobes.tech AI
Odpoveď od AI
Streamy vo Flutteri sa používajú na prácu s posloupnosťou asynchrónnych udalostí. Sú založené na paradigme reaktívneho programovania a poskytujú spôsob spracovania dát podľa ich príchodu.
Hlavné použitia streamov:
- Aktualizácie UI: Počúvanie zmien dát (napríklad z sieťových požiadaviek alebo databázy) a automatické aktualizácie widgetov.
- Komunikácia medzi BLoC/Cubit a UI: BLoC/Cubit používajú
Stream(cezStateStreamable) na emitovanie stavov, na ktoré sa UI prihlási. - Spracovanie vstupných udalostí: Sledovanie udalostí vstupu (napríklad z textových polí).
- Práca so WebSocket a ďalšie asynchrónne operácie: Získavanie dát v reálnom čase.
Hlavné koncepty:
- Stream: Sekvencia asynchrónnych udalostí.
- StreamController: Riadi stream, umožňuje pridávať dáta (
add), chyby (addError) a zatvárať stream (close). - StreamSubscription: Objekt reprezentujúci aktívne odberanie na stream. Umožňuje prijímať dáta (
onData), spracovávať chyby (onError) a ukončiť stream (onDone).
Príklad použitia s StreamBuilder:
// Predpokladajme, že máme stream, ktorý emituje celé čísla
Stream<int> countStream = Stream.periodic(Duration(seconds: 1), (count) => count);
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return StreamBuilder<int>(
stream: countStream, // Prihlásenie na stream
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator(); // Kým stream čaká na dáta
} else if (snapshot.hasError) {
return Text('Error: ${snapshot.error}'); // Ak nastane chyba
} else {
return Text('Count: ${snapshot.data}'); // Zobrazenie posledných dát zo streamu
}
},
);
}
}
Streamy môžu byť:
- Single-subscription: Len jeden poslucháč môže byť prihlásený v ktoromkoľvek momente. Pokus o prihlásenie druhého spôsobí chybu.
- Broadcast: Mnoho poslucháčov sa môže prihlásiť na jeden stream. Dáta sú odosielané všetkým aktívnym poslucháčom.
Na spracovanie streamov sa často používajú operátory z balíka rxdart, ktoré poskytujú bohatý súbor utilít na transformáciu, filtrovanie a spájanie streamov.