miniriverpodi disainipõhimõtted.
Pakett piirab funktsioone tahtlikult, et käitumine oleks selge: provideri identiteet args-ide põhjal, Scope'i kaudu süstimine ja etteaimatav dispose'imise semantika.
Mis muutub võrreldes Riverpodiga
Genereeritud family-klasside ja kaudsete notifier-kanalite asemel eelistab miniriverpod alamklassi + args + selget invoke'i.
Provideri identiteet
runtimeType + argsi räsi
Family'i alternatiiv
Loo Providerist / AsyncProviderist alamklass ja anna edasi super.args((...)).
DI varuvariant
Scope<T>.required + overrideWithValue
Miks see on oluline
Saad võrdsust ja override'e hinnata tavaliste Darti konstruktorite põhjal, mis muudab silumise ja testid lihtsaks.
Provideri identiteet args-ide põhjal
args määrab provideri võtme, nii et võrdsed args-väärtused tähendavad sama vahemälukirjet ProviderContaineris.
Identiteedireegel
Praktilised tagajärjed
- Eraldi family-tüüpi pole vaja.
- Argumentide kaupa override'i tehakse provideri eksemplare luues.
- Hoia args-väärtused stabiilsed ja muutmatud, et vahemälu oleks etteaimatav.
Näide: family-laadne provider + Scope'i varuvariant
Kasuta identiteedina konstruktoriargumenti ja süsti Scope'i kaudu varuvariant.
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);
}
}
// Süstimine
ProviderScope(
overrides: [
ProductProvider.fallback.overrideWithValue(ProductProvider(search: 'jeans')),
],
child: const App(),
);
Järgmised sammud
Providerid ja lugemine
Vaata konkreetseid mustreid watch/read/listen ja AsyncProvider.future jaoks.
Ava provideridMutatsioonid
Rakenda olekuvärskendused mutatsioonitokenite, mutate'i ja ref.invoke abil.
Ava mutatsioonid