Sobes.tech
Middle

Πώς χρησιμοποιούνται τα streams στο Flutter;

sobes.tech AI

Απάντηση από AI

Οι ροές στο Flutter χρησιμοποιούνται για την εργασία με ακολουθίες ασύγχρονων γεγονότων. Βασίζονται στην παραδείγματα προγραμματισμού αντιδραστικής και παρέχουν έναν τρόπο επεξεργασίας δεδομένων καθώς αυτά λαμβάνονται.

Βασικές εφαρμογές των ροών:

  • Ενημερώσεις UI: Παρακολούθηση αλλαγών δεδομένων (π.χ. από αιτήματα δικτύου ή βάσεις δεδομένων) και αυτόματη ενημέρωση των widget.
  • Επικοινωνία μεταξύ BLoC/Cubit και UI: Τα BLoC/Cubit χρησιμοποιούν Stream (μέσω StateStreamable) για την εκπομπή καταστάσεων, στις οποίες εγγράφεται το UI.
  • Επεξεργασία εισόδου χρήστη: Παρακολούθηση γεγονότων εισόδου (π.χ. από πεδία κειμένου).
  • Εργασία με WebSocket και άλλες ασύγχρονες λειτουργίες: Λήψη δεδομένων σε πραγματικό χρόνο.

Βασικές έννοιες:

  • Stream: Ακολουθία ασύγχρονων γεγονότων.
  • StreamController: Διαχειρίζεται το ρεύμα, επιτρέπει την προσθήκη δεδομένων (add), σφαλμάτων (addError) και το κλείσιμο του ρεύματος (close).
  • StreamSubscription: Αντικείμενο που αντιπροσωπεύει μια ενεργή εγγραφή στο ρεύμα. Επιτρέπει την λήψη δεδομένων (onData), την επεξεργασία σφαλμάτων (onError) και το τερματισμό του ρεύματος (onDone).

Παράδειγμα χρήσης με StreamBuilder:

// Υποθέτουμε ότι έχουμε ένα ρεύμα που εκπέμπει ακέραιους αριθμούς
Stream<int> countStream = Stream.periodic(Duration(seconds: 1), (count) => count);

class MyWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return StreamBuilder<int>(
      stream: countStream, // Εγγραφή στο ρεύμα
      builder: (context, snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting) {
          return CircularProgressIndicator(); // Περιμένει δεδομένα
        } else if (snapshot.hasError) {
          return Text('Σφάλμα: ${snapshot.error}'); // Σε περίπτωση σφάλματος
        } else {
          return Text('Count: ${snapshot.data}'); // Εμφάνιση των τελευταίων δεδομένων
        }
      },
    );
  }
}

Τα ρεύματα μπορούν να είναι:

  • Single-subscription: Μόνο ένας ακροατής μπορεί να εγγραφεί ανά πάσα στιγμή. Η προσπάθεια εγγραφής δεύτερης θα προκαλέσει σφάλμα.
  • Broadcast: Πολλοί ακροατές μπορούν να εγγραφούν στο ίδιο ρεύμα. Τα δεδομένα αποστέλλονται σε όλους τους ενεργούς ακροατές.

Για την επεξεργασία ρευμάτων, συχνά χρησιμοποιούνται οι τελεστές από το πακέτο rxdart, που παρέχουν μια πλούσια συλλογή βοηθητικών εργαλείων για μετασχηματισμό, φιλτράρισμα και συνδυασμό ρευμάτων.