Sobes.tech
Junior

Mire használják a stream-eket a Flutterben?

sobes.tech MI

Válasz az MI-től

A Flutterben a stream-ek aszinkron eseménysorozatok kezelésére szolgálnak.

Fő felhasználási esetek:

  1. Reagálás adatmódosításokra: Redux, BLoC minták stream-eket használnak az alkalmazás állapotának kezelésére és a UI reaktív frissítésére változás esetén.
  2. Adatok áramlásával való munka: Adatok beszerzése hálózaton keresztül (pl. WebSocket), fájlok olvasása, eszköz érzékelőivel való munka.
  3. Felhasználói interakciók feldolgozása: Görgetés figyelése, Draggable / DragTarget.
  4. Aszinkron műveletek: Feladatok végrehajtása háttérben és eredmények megszerzése, amint elérhetővé válnak.

Kulcsfogalmak:

  • Stream: Aszinkron események sorozata. Egy stream 0 vagy több eseményt emittálhat, majd befejeződik (sikerrel vagy hibával).
  • StreamSubscription: Egy stream-re való feliratkozást jelöl. Lehetővé teszi az események fogadását és a feliratkozás kezelését (szüneteltetés, folytatás, törlés).
  • Sink: Az adatok hozzáadására szolgál a streamhez.
  • StreamBuilder: Widget, amely új adatok érkezésekor újraépül.
// StreamBuilder használatának példája
StreamBuilder<int>(
  stream: counterStream, // A te stream-ed
  builder: (BuildContext context, AsyncSnapshot<int> snapshot) {
    if (snapshot.hasError) {
      return Text('Hiba: \\${snapshot.error}');
    }
    switch (snapshot.connectionState) {
      case ConnectionState.none:
        return Text('Várakozás...');
      case ConnectionState.waiting:
        return CircularProgressIndicator();
      case ConnectionState.active:
        return Text('Érték: \\${snapshot.data}');
      case ConnectionState.done:
        return Text('Stream befejeződött. Utolsó érték: \\${snapshot.data}');
    }
  },
)
// Egyszerű stream példa, ami számokat emít
Stream<int> countStream(int max) async* {
  for (int i = 0; i <= max; i++) {
    await Future.delayed(Duration(seconds: 1));
    yield i; // Érték kibocsátása
  }
}