Middle
Kaip naudojami srautai Flutter?
sobes.tech AI
Atsakymas iš AI
Flutter'e srautai naudojami darbui su asinchroninėmis įvykių sekomis. Jie pagrįsti reaktyvaus programavimo paradigma ir suteikia būdą apdoroti duomenis jų gavimo metu.
Pagrindiniai srautų taikymai:
- Vartotojo sąsajos atnaujinimai: Duomenų pokyčių stebėjimas (pvz., iš tinklo užklausų ar duomenų bazės) ir automatinis widgetų atnaujinimas.
- Ryšys tarp BLoC/Cubit ir UI: BLoC/Cubit naudoja
Stream(perStateStreamable) būsenų emitavimui, į kurias prenumeruoja UI. - Vartotojo įvesties įvykių apdorojimas: Stebėti įvesties įvykius (pvz., iš teksto laukelių).
- Darbas su WebSocket ir kitomis asinchroninėmis operacijomis: Duomenų gavimas realiu laiku.
Pagrindinės sąvokos:
- Stream: Asinchroninių įvykių seka.
- StreamController: Valdo srautą, leidžia pridėti duomenis (
add), klaidas (addError) ir uždaryti srautą (close). - StreamSubscription: Objektas, atstovaujantis aktyvią prenumeratą srautui. Leidžia gauti duomenis (
onData), apdoroti klaidas (onError) ir užbaigti srautą (onDone).
Pavyzdys naudojant StreamBuilder:
// Tarkime, turime srautą, kuris emitina sveikus skaičius
Stream<int> countStream = Stream.periodic(Duration(seconds: 1), (count) => count);
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return StreamBuilder<int>(
stream: countStream, // Prenumeruojame srautą
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator(); // Kol srautas laukia duomenų
} else if (snapshot.hasError) {
return Text('Error: ${snapshot.error}'); // Jei įvyksta klaida
} else {
return Text('Count: ${snapshot.data}'); // Rodo paskutinius duomenis iš srauto
}
},
);
}
}
Srautai gali būti:
- Single-subscription: Tik vienas klausytojas gali būti prenumeruotas bet kuriuo metu. Bandymas prenumeruoti antrą kartą sukels klaidą.
- Broadcast: Daug klausytojų gali būti prenumeruoti vieną srautą. Duomenys siunčiami visiems aktyviems klausytojams.
Dažnai srautų apdorojimui naudojami rxdart paketo operatoriai, kurie siūlo turtingą įrankių rinkinį srautų transformacijai, filtravimui ir sujungimui.