Dizajnerska načela iza miniriverpoda.
Paket namjerno sužava mogućnosti kako bi ponašanje ostalo eksplicitno: identitet providera prema args, injektiranje kroz Scope i predvidiva semantika oslobađanja.
Što se mijenja u odnosu na Riverpod
Umjesto generiranih family klasa i implicitnih notifier kanala, miniriverpod preferira podklasu + args + eksplicitni invoke.
Identitet providera
runtimeType + args hash
alternativa za family
Podklasirajte Provider / AsyncProvider i proslijedite super.args((...))
DI rezervna vrijednost
Scope<T>.required + overrideWithValue
Zašto je ovo važno
O jednakosti i overrideovima možete zaključivati iz običnih Dart konstruktora, što debugging i testove čini jednostavnima.
Identitet providera s args
args definira ključ providera, pa jednaki args znači isti cache unos unutar ProviderContainera.
Pravilo identiteta
Praktične posljedice
- Nije potreban poseban family tip.
- Override po argumentu radi se stvaranjem instanci providera.
- Držite args stabilnima i nepromjenjivima za predvidivo keširanje.
Primjer: provider sličan family + Scope rezervna instanca
Koristite argument konstruktora kao identitet i umetnite rezervnu instancu kroz 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);
}
}
// Inject
ProviderScope(
overrides: [
ProductProvider.fallback.overrideWithValue(ProductProvider(search: 'jeans')),
],
child: const App(),
);
Sljedeći koraci
Provideri i čitanje
Pogledajte konkretne obrasce za watch/read/listen i AsyncProvider.future.
Otvori providereMutacije
Implementirajte ažuriranja stanja pomoću mutation tokena, mutate i ref.invoke.
Otvori mutacije