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, που παρέχουν μια πλούσια συλλογή βοηθητικών εργαλείων για μετασχηματισμό, φιλτράρισμα και συνδυασμό ρευμάτων.