Načela zasnove za miniriverpod.

Paket namenoma zoži funkcionalnosti, da ostane vedenje eksplicitno: identiteta ponudnika prek args, injiciranje v scope in predvidljiva semantika odstranjevanja.

Kaj se spremeni glede na Riverpod

Namesto generiranih family razredov in implicitnih kanalov za obveščanje miniriverpod raje uporablja subclass + args + eksplicitni invoke.

Identiteta ponudnika

runtimeType + hash args

alternativa family

Dedujte iz Provider / AsyncProvider in posredujte super.args((...))

DI rezerva

Scope<T>.required + overrideWithValue

Zakaj je to pomembno

O enakosti in overrideih lahko razmišljate iz navadnih Dart konstruktorjev, kar ohranja odpravljanje napak in teste preproste.

Identiteta ponudnika z args

args določa ključ ponudnika, zato enaki args pomenijo isti vnos predpomnilnika znotraj ProviderContainerja.

Pravilo identitete

Praktične posledice

- Poseben tip family ni potreben.
- Prepisovanje po argumentu se izvede z ustvarjanjem primerkov ponudnika.
- Args ohranjajte stabilne in nespremenljive za predvidljivo predpomnjenje.

Primer: provider, podoben family + rezervni Scope

Uporabite argument konstruktorja kot identiteto in prek Scope vstavite rezervni primerek.

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

// Vstavi
ProviderScope(
  overrides: [
    ProductProvider.fallback.overrideWithValue(ProductProvider(search: 'jeans')),
  ],
  child: const App(),
);
Scope ohranja povezovanje odvisnosti eksplicitno in prijazno testiranju.
overrideWithValue deluje za vsak primerek ponudnika, vključno s primerki na osnovi args.
Vedenje autoDispose ostane nespremenjeno pri uporabi subclass + args.

Naslednji koraki

Ponudniki in branje

Oglejte si konkretne vzorce za watch/read/listen in AsyncProvider.future.

Odpri ponudnike

Mutacije

Izvedite posodobitve stanja z mutation tokeni, mutate in ref.invoke.

Odpri mutacije