Sobes.tech
Junior

Kam tiek Flutter straumes?

sobes.tech AI

Atbilde no AI

Flutter izmanto straumes (streams) asinhrono notikumu secības apstrādei:

Galvenie lietojumi:

  1. 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ā:
  2. Plūsmas datu apstrāde: Tīkla datu saņemšana (piemēram, WebSocket), failu lasīšana, sensoru izmantošana:
  3. Lietotāja mijiedarbības apstrāde: Sekošana ritinājumam, Draggable / DragTarget:
  4. 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
  }
}