Ενσωμάτωση Flutter με ρητή ιδιοκτησία του container.
Το ProviderScope μπορεί να κατέχει ένα container ή να λαμβάνει ένα εξωτερικά. Τα Consumer API διατηρούν την πρόσβαση στο WidgetRef συμβατή με κώδικα σε στυλ Riverpod.
Ιδιοκτησία του ProviderScope
Η ιδιοκτησία του container αλλάζει την ευθύνη του dispose.
Εσωτερικό container
ProviderScope(child: ...) κάνει dispose αυτόματα
Εξωτερικό container
ProviderScope(container: c, ...) απαιτεί το c.dispose() να κληθεί από τον χρήστη
Μη ελεγχόμενο scope
Το UncontrolledProviderScope δεν κάνει ποτέ dispose το container
Συνηθισμένη παγίδα
Στα widget tests, θυμηθείτε να κάνετε dispose το ProviderContainer που εισήχθη εξωτερικά, ώστε να αποφύγετε εκκρεμείς διαρροές timer.
Παραλλαγές Consumer
Όλες οι επιλογές εκθέτουν το WidgetRef· επιλέξτε με βάση το στυλ του widget και τις ανάγκες τοπικής κατάστασης.
Ρίζα εφαρμογής
Πότε να χρησιμοποιήσετε το καθένα
Consumer: τοπικό builder block για μικρές reactive περιοχές.
ConsumerWidget: stateless widget με build(context, ref).
ConsumerStatefulWidget: stateful widget με ref μέσα στο ConsumerState.
Παράδειγμα: ConsumerStatefulWidget
Χρησιμοποιήστε το ConsumerState όταν χρειάζεστε τόσο το WidgetRef όσο και το τοπικό μεταβαλλόμενο UI state.
class HomePage extends ConsumerStatefulWidget {
const HomePage({super.key});
@override
ConsumerState<HomePage> createState() => _HomePageState();
}
class _HomePageState extends ConsumerState<HomePage> {
bool expanded = false;
@override
Widget build(BuildContext context) {
final user = ref.watch(currentUser);
return Column(
children: [
Text('$user'),
Switch(
value: expanded,
onChanged: (v) => setState(() => expanded = v),
),
],
);
}
}
Επόμενα βήματα
Testing
Επαληθεύστε τον κύκλο ζωής του container, τα overrides και τις ασύγχρονες ενημερώσεις σε unit και widget tests.
Άνοιγμα TestingAPI Reference
Δείτε τις υπογραφές για το ProviderScope, το WidgetRef και τις μεθόδους του container.
Άνοιγμα API Reference