Sobes.tech
Middle

Hogyan használják az áramlásokat a Flutterben?

sobes.tech MI

Válasz az MI-től

A Flutterben a stream-ek aszinkron eseménysorozatokkal való munkára szolgálnak. A reaktív programozási paradigma alapjaira épülnek, és lehetőséget adnak az adatok feldolgozására azok érkezésekor.

A stream-ek fő alkalmazási területei:

  • UI-frissítések: Adatmódosítások figyelése (pl. hálózati kérések vagy adatbázisok esetén), és a widgetek automatikus frissítése.
  • Kommunikáció a BLoC/Cubit és a UI között: A BLoC/Cubit a Stream-et (a StateStreamable-en keresztül) használja az állapotok kibocsátására, amelyekhez a UI csatlakozik.
  • Felhasználói bemenetek feldolgozása: Események figyelése (pl. szövegmezőkből).
  • WebSocket és más aszinkron műveletek kezelése: Adatok fogadása valós időben.

Fő fogalmak:

  • Stream: Aszinkron eseménysorozat.
  • StreamController: A stream-et kezeli, lehetővé teszi adatok (add), hibák (addError) hozzáadását és a stream bezárását (close).
  • StreamSubscription: Egy aktív feliratkozást reprezentáló objektum. Lehetővé teszi adatok (onData) fogadását, hibák (onError) kezelését és a stream befejezését (onDone).

Példa a StreamBuilder-rel:

// Tegyük fel, van egy stream, ami egész számokat küld
Stream<int> countStream = Stream.periodic(Duration(seconds: 1), (count) => count);

class MyWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return StreamBuilder<int>(
      stream: countStream, // Feliratkozás a stream-re
      builder: (context, snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting) {
          return CircularProgressIndicator(); // Még vár a stream adatokra
        } else if (snapshot.hasError) {
          return Text('Hiba: ${snapshot.error}'); // Hiba esetén
        } else {
          return Text('Count: ${snapshot.data}'); // A legutóbbi adatok megjelenítése
        }
      },
    );
  }
}

A stream-ek lehetnek:

  • Single-subscription: Csak egy hallgató lehet feliratkozva egyszerre. A második feliratkozási kísérlet hibát eredményez.
  • Broadcast: Több hallgató is feliratkozhat ugyanarra a stream-re. Az adatok minden aktív hallgatónak elérhetőek.

A stream-ek feldolgozásához gyakran használják az rxdart csomag operátorait, amelyek gazdag eszköztárat kínálnak a transzformációhoz, szűréshez és a stream-ek összekapcsolásához.