Ενσωμάτωση 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),
        ),
      ],
    );
  }
}
Η εσωτερική λογική του Consumer προγραμματίζει τα rebuilds μετά το frame, μειώνοντας τα προβλήματα setState κατά το build.
Χρησιμοποιήστε το WidgetRef.watch μόνο για τιμές που πρέπει να προκαλούν rebuilds.
Κρατήστε τα side effects έξω από το build· χρησιμοποιήστε callbacks και μεθόδους invoke/refresh.

Επόμενα βήματα

Testing

Επαληθεύστε τον κύκλο ζωής του container, τα overrides και τις ασύγχρονες ενημερώσεις σε unit και widget tests.

Άνοιγμα Testing

API Reference

Δείτε τις υπογραφές για το ProviderScope, το WidgetRef και τις μεθόδους του container.

Άνοιγμα API Reference