Provider — πακέτο διαχείρισης κατάστασης για Flutter, δημιουργημένο από τον Rémi Rousselet το 2019 ως ένα περιτύλιγμα πάνω από το InheritedWidget. Το Provider λύνει το πρόβλημα μεταφοράς δεδομένων προς τα κάτω στο δένδρο widget χωρίς props drilling: οποιοδήποτε widget έχει πρόσβαση στην κατάσταση μέσω context.read<T>() ή context.watch<T>(). Σύμφωνα με το pub.dev, το Provider είναι ο δημοφιλέστερος διαχειριστής κατάστασης Flutter με πάνω από 25 χιλιάδες likes.
Κύρια Σημεία
Provider — πακέτο για διαχείριση κατάστασης και ενετοπισμό εξαρτήσεων στο Flutter, κατασκευασμένο πάνω στο InheritedWidget. Το Provider κάνει ενα αντικείμενο (κατάσταση, υπηρεσία, αποθηκη) διαθέσιμο στο δένδρο widget και αυτόματα ανακατασκευάζει το UI όταν αλλάζουν τα δεδομένα.
Το Provider είναι επίσημα συνιστώμενο από τη Google για διαχείριση κατάστασης στο Flutter (Flutter Team, 2019-2023). Σύμφωνα με την Flutter Community Survey 2025, το Provider χρησιμοποιείται σε 72% των εφαρμογών Flutter.
ChangeNotifier — ενσωματωμένη κλάση Flutter που υλοποιεί το πρότυπο Listener. Ειδοποιεί τους συνδρομητές μέσω της κλήσης notifyListeners().
class CounterProvider extends ChangeNotifier {
int _count = 0;
int get count => _count;
void increment() {
_count++;
notifyListeners();
}
void reset() {
_count = 0;
notifyListeners();
}
}Κανόνες notifyListeners: καλείτε μετά από πλήρη αλλαγή δεδομένων — όχι στη μέση της μεθόδου, αλλά στο τέλος.
Consumer — widget που εγγράφεται στο ChangeNotifier και ανακατασκευάζεται σε κάθε κλήση notifyListeners().
Consumer<CounterProvider>(
builder: (context, provider, child) => Column(
children: [
child!, // δεν ανακατασκευάζεται
Text('${provider.count}'),
ElevatedButton(
onPressed: () => provider.increment(),
child: Icon(Icons.add),
),
],
),
child: Text('Αριθμητής:'),
)context.watch — μέθοδος επέκτασης BuildContext για εγγραφή σε Provider. context.read — πρόσβαση χωρίς συνδρομή. context.select — εγγραφή σε συγκεκριμένο πεδίο του μοντέλου.
MultiProvider — widget για εγγραφή πολλών Provider χωρίς φωλιάσματα. ProxyProvider — Provider που εξαρτάται από άλλο Provider.
MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => CartProvider()),
ChangeNotifierProvider(create: (_) => AuthProvider()),
ProxyProvider<AuthProvider, OrderProvider>(
update: (_, auth, __) => OrderProvider(auth.userId),
),
],
child: MaterialApp(home: HomePage()),
)Το Provider δοκιμάζεται τυλίγοντας το widget σε MultiProvider με τιμές δοκιμής.
import 'package:flutter_test/flutter_test.dart';
void main() {
testWidgets('Counter increments on button tap',
(tester) async {
await tester.pumpWidget(
ChangeNotifierProvider(
create: (_) => CounterProvider(),
child: CounterScreen(),
),
);
await tester.tap(find.byKey(Key('increment')));
await tester.pump();
expect(find.text('1'), findsOneWidget);
},
);
}Η απόδοση του Provider βασίζεται στο InheritedWidget: όταν αλλάζει το Provider, όλα τα widget που έχουν εγγραφεί μέσω context.watch ή Consumer ανακατασκευάζονται.
| Μέθοδος | Συνδρομή | Ανακατασκευή | Χρήση |
|---|---|---|---|
| context.watch | Πλήρες μοντέλο | Κάθε αλλαγή | Απλά widget |
| Consumer | Πλήρες μοντέλο | Κάθε αλλαγή | Με child βελτιστοποίηση |
| context.select | Συγκεκριμένο πεδίο | Μόνο όταν αλλάζει το πεδίο | Πολύπλοκα μοντέλα |
| context.read | Καμία | Ποτέ | Event handlers |
Συχνές Ερωτήσεις
Provider — περιτύλιγμα πάνω από το InheritedWidget για ενετοπισμό εξαρτήσεων με ChangeNotifier. BLoC — αρχιτεκτονικό πρότυπο με Event + Stream για απομόνωση λογικής.
ChangeNotifierProvider — τύπος Provider για στιγμιότυπα ChangeNotifier. Δημιουργεί αντικείμενο μέσω create και ανακατασκευάζει το Consumer όταν καλείται το notifyListeners.
Χρησιμοποιήστε context.select αντί για context.watch. Χωρίστε τα μεγάλα ChangeNotifier σε μικρότερα.
Ναί. Provider για αμετάβλητα αντικείμενα. StreamProvider για ροές. FutureProvider για Future. ProxyProvider για Provider που εξαρτώνται από άλλα.
ProviderNotFoundException — εξαίρεση κατά τη λειτουργία που προκύπτει όταν γίνεται προσπάθεια να αποκτηθεί ένα Provider που δεν έχει δηλωθεί ψηλότερα στο δένδρο widget.
Περίληψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης