Sobes.tech
Junior

Milleks Flutteris voogusid kasutatakse?

sobes.tech AI

Vastus AI-lt

Flutter kasutab vooge (streams) asünkroonsete sündmuste jada töötlemiseks:

Peamised kasutusjuhtumid:

  1. Andmete muutustele reageerimine: Redux, BLoC-mudelid kasutavad vooge rakenduse oleku haldamiseks ja reaktiivseks kasutajaliidese uuendamiseks muutuste ajal:
  2. Voolandmete töötlemine: Võrguandmete saamine (näiteks WebSocket), failidest lugemine, seadme sensoritega töötamine:
  3. Kasutajaliidese interaktsioonide töötlemine: Kerimise jälgimine, Draggable / DragTarget:
  4. Asünkroonsed toimingud: Tööde taustal tegemine ja tulemuste saamine nende valmisoleku ajal:

Peamised mõisted:

  • Stream: Asünkroonsete sündmuste jada. Voog võib emiteerida 0 või rohkem sündmusi ning seejärel lõpetada (õnnestunult või veaga):
  • StreamSubscription: Esindab tellimust voogule. Võimaldab saada sündmusi voost ja hallata tellimust (peatada, jätkata, tühistada):
  • Sink: Kasutatakse andmete lisamiseks voogu:
  • StreamBuilder: Vidin, mis rekonstrueerub uute andmete saamisel voost:
// Näide kasutades StreamBuilderit
StreamBuilder<int>(
  stream: counterStream, // Teie voog
  builder: (BuildContext context, AsyncSnapshot<int> snapshot) {
    if (snapshot.hasError) {
      return Text('Viga: ${snapshot.error}');
    }
    switch (snapshot.connectionState) {
      case ConnectionState.none:
        return Text('Ootamine...');
      case ConnectionState.waiting:
        return CircularProgressIndicator();
      case ConnectionState.active:
        return Text('Väärtus: ${snapshot.data}');
      case ConnectionState.done:
        return Text('Voog lõppes. Viimane väärtus: ${snapshot.data}');
    }
  },
)
// Lihtne voognäide, mis emiteerib numbreid
Stream<int> countStream(int max) async* {
  for (int i = 0; i <= max; i++) {
    await Future.delayed(Duration(seconds: 1));
    yield i; // Emiteeri väärtus
  }
}