Junior
Kam tiek Flutter straumes?
sobes.tech AI
Atbilde no AI
Flutter izmanto straumes (streams) asinhrono notikumu secības apstrādei:
Galvenie lietojumi:
- Datu izmaiņu reakcija: Redux, BLoC modeļi izmanto straumes, lai pārvaldītu lietotnes stāvokli un reaktīvi atjauninātu UI izmaiņu laikā:
- Plūsmas datu apstrāde: Tīkla datu saņemšana (piemēram, WebSocket), failu lasīšana, sensoru izmantošana:
- Lietotāja mijiedarbības apstrāde: Sekošana ritinājumam, Draggable / DragTarget:
- Asinhronās operācijas: Uzdevumu izpilde fonā un rezultātu saņemšana to gatavības laikā:
Galvenās jēdzieni:
- Stream: Asinhroni notikumu secība. Strūms var emitēt 0 vai vairāk notikumu, pēc tam noslēgties (ar panākumiem vai kļūdām):
- StreamSubscription: Reprezentē abonēšanu uz straumi. Atļauj saņemt notikumus no straumes un pārvaldīt abonēšanu (apturēt, atsākt, atcelt):
- Sink: Izmanto datu pievienošanai straumei:
- StreamBuilder: Vidi, kas pārveidojas, saņemot jaunus datus no straumes:
// Piemērs, izmantojot StreamBuilder
StreamBuilder<int>(
stream: counterStream, // Jūsu straume
builder: (BuildContext context, AsyncSnapshot<int> snapshot) {
if (snapshot.hasError) {
return Text('Kļūda: ${snapshot.error}');
}
switch (snapshot.connectionState) {
case ConnectionState.none:
return Text('Gaidīšana...');
case ConnectionState.waiting:
return CircularProgressIndicator();
case ConnectionState.active:
return Text('Vērtība: ${snapshot.data}');
case ConnectionState.done:
return Text('Straume pabeigta. Pēdējā vērtība: ${snapshot.data}');
}
},
)
// Vienkāršs straumes piemērs, kas emitē skaitļus
Stream<int> countStream(int max) async* {
for (int i = 0; i <= max; i++) {
await Future.delayed(Duration(seconds: 1));
yield i; // Emitēt vērtību
}
}