Οι αρχές σχεδίασης πίσω από το miniriverpod.

Το πακέτο περιορίζει σκόπιμα τις δυνατότητες για να κρατά τη συμπεριφορά ρητή: ταυτότητα provider με args, έγχυση με Scope και προβλέψιμη συμπεριφορά διάθεσης.

Τι αλλάζει σε σχέση με το Riverpod

Αντί για παραγόμενες family κλάσεις και έμμεσα notifier channels, το miniriverpod προτιμά υποκλάση + args + ρητό invoke.

Ταυτότητα provider

runtimeType + hash των args

Εναλλακτική του family

Κάντε υποκλάση του Provider / AsyncProvider και περάστε super.args((...)).

DI fallback

Scope<T>.required + overrideWithValue

Γιατί έχει σημασία

Μπορείτε να συλλογίζεστε για την ισότητα και τα overrides από απλούς Dart constructors, κάτι που κρατά τον εντοπισμό σφαλμάτων και τις δοκιμές απλά.

Ταυτότητα provider με args

Το args ορίζει το κλειδί του provider, άρα ίδια args σημαίνει ίδια καταχώριση cache μέσα σε ένα ProviderContainer.

Κανόνας ταυτότητας

Πρακτικές συνέπειες

- Δεν απαιτείται ειδικός family τύπος.
- Το override ανά argument γίνεται με τη δημιουργία provider instances.
- Κρατήστε τα args σταθερά και αμετάβλητα για προβλέψιμο caching.

Παράδειγμα: provider τύπου family + fallback μέσω Scope

Χρησιμοποιήστε ένα όρισμα του constructor ως ταυτότητα και εισαγάγετε μια εφεδρική instance μέσω Scope.

class ProductProvider extends AsyncProvider<List<Product>> {
  ProductProvider({this.search = ''}) : super.args((search,));
  final String search;

  static final fallback = Scope<ProductProvider>.required('product.fallback');

  @override
  FutureOr<List<Product>> build(ref) async {
    final api = ref.watch(productsApiProvider);
    return api.search(q: search);
  }
}

// Έγχυση
ProviderScope(
  overrides: [
    ProductProvider.fallback.overrideWithValue(ProductProvider(search: 'jeans')),
  ],
  child: const App(),
);
Το Scope κρατά τη σύνδεση των εξαρτήσεων ρητή και φιλική προς τις δοκιμές.
Το overrideWithValue λειτουργεί ανά instance provider, συμπεριλαμβανομένων των instances που βασίζονται σε args.
Η συμπεριφορά του autoDispose δεν αλλάζει με τη χρήση υποκλάσης + args.

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

Providers και αναγνώσεις

Δείτε συγκεκριμένα patterns για watch/read/listen και AsyncProvider.future.

Άνοιγμα Providers

Μεταλλάξεις

Υλοποιήστε ενημερώσεις κατάστασης με mutation tokens, mutate και ref.invoke.

Άνοιγμα Mutations