Middle
Hogyan használják az áramlásokat a Flutterben?
sobes.tech MI
Válasz az MI-től
A Flutterben a stream-ek aszinkron eseménysorozatokkal való munkára szolgálnak. A reaktív programozási paradigma alapjaira épülnek, és lehetőséget adnak az adatok feldolgozására azok érkezésekor.
A stream-ek fő alkalmazási területei:
- UI-frissítések: Adatmódosítások figyelése (pl. hálózati kérések vagy adatbázisok esetén), és a widgetek automatikus frissítése.
- Kommunikáció a BLoC/Cubit és a UI között: A BLoC/Cubit a
Stream-et (aStateStreamable-en keresztül) használja az állapotok kibocsátására, amelyekhez a UI csatlakozik. - Felhasználói bemenetek feldolgozása: Események figyelése (pl. szövegmezőkből).
- WebSocket és más aszinkron műveletek kezelése: Adatok fogadása valós időben.
Fő fogalmak:
- Stream: Aszinkron eseménysorozat.
- StreamController: A stream-et kezeli, lehetővé teszi adatok (
add), hibák (addError) hozzáadását és a stream bezárását (close). - StreamSubscription: Egy aktív feliratkozást reprezentáló objektum. Lehetővé teszi adatok (
onData) fogadását, hibák (onError) kezelését és a stream befejezését (onDone).
Példa a StreamBuilder-rel:
// Tegyük fel, van egy stream, ami egész számokat küld
Stream<int> countStream = Stream.periodic(Duration(seconds: 1), (count) => count);
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return StreamBuilder<int>(
stream: countStream, // Feliratkozás a stream-re
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator(); // Még vár a stream adatokra
} else if (snapshot.hasError) {
return Text('Hiba: ${snapshot.error}'); // Hiba esetén
} else {
return Text('Count: ${snapshot.data}'); // A legutóbbi adatok megjelenítése
}
},
);
}
}
A stream-ek lehetnek:
- Single-subscription: Csak egy hallgató lehet feliratkozva egyszerre. A második feliratkozási kísérlet hibát eredményez.
- Broadcast: Több hallgató is feliratkozhat ugyanarra a stream-re. Az adatok minden aktív hallgatónak elérhetőek.
A stream-ek feldolgozásához gyakran használják az rxdart csomag operátorait, amelyek gazdag eszköztárat kínálnak a transzformációhoz, szűréshez és a stream-ek összekapcsolásához.