Dizaina principi aiz miniriverpod.

Pakete apzināti sašaurina iespējas, lai uzvedība būtu skaidra: provider identitāte pēc args, scope veikta injekcija un paredzama atbrīvošanas semantika.

Kas mainās salīdzinājumā ar Riverpod

Nevis ģenerētas family klases un netieši notifier kanāli, bet miniriverpod dod priekšroku apakšklasei + args + explicit invoke.

Provider identitāte

runtimeType + args hash

family alternatīva

Pārmantojiet Provider / AsyncProvider un nododiet super.args((...))

DI rezerves variants

Scope<T>.required + overrideWithValue

Kāpēc tas ir svarīgi

Par vienādību un override var spriest no parastiem Dart konstruktoriem, kas padara atkļūdošanu un testus vienkāršus.

Provider identitāte ar args

args definē provider atslēgu, tāpēc vienādi args nozīmē vienu un to pašu keša ierakstu ProviderContainer iekšienē.

Identitātes noteikums

Praktiskās sekas

- Nav nepieciešams atsevišķs family tips.
- Override katram argumentam tiek veikts, veidojot provider instance.
- Lai kešošana būtu paredzama, saglabājiet args stabilus un nemainīgus.

Piemērs: family līdzīgs provider + Scope rezerves variants

Izmantojiet konstruktora argumentu kā identitāti un caur Scope ievietojiet rezerves instance.

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);
  }
}

// Ievietošana
ProviderScope(
  overrides: [
    ProductProvider.fallback.overrideWithValue(ProductProvider(search: 'jeans')),
  ],
  child: const App(),
);
Scope uztur atkarību savienošanu skaidru un testiem draudzīgu.
overrideWithValue darbojas katram provider instance, tostarp arī args balstītiem instance.
autoDispose uzvedība nemainās, izmantojot apakšklasi + args.

Nākamie soļi

Provideri un lasījumi

Skatiet konkrētus watch/read/listen un AsyncProvider.future piemērus.

Atvērt providerus

Mutācijas

Ieviesiet stāvokļa atjauninājumus ar mutation token, mutate un ref.invoke.

Atvērt mutācijas