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(),
);
Nākamie soļi
Provideri un lasījumi
Skatiet konkrētus watch/read/listen un AsyncProvider.future piemērus.
Atvērt providerusMutācijas
Ieviesiet stāvokļa atjauninājumus ar mutation token, mutate un ref.invoke.
Atvērt mutācijas