A miniriverpod mögötti tervezési elvek.
A csomag szándékosan szűkíti a funkciókat, hogy a viselkedés explicit maradjon: args szerinti provider-identitás, Scope-on keresztüli injektálás és kiszámítható eldobási szemantika.
Mi változik a Riverpodhoz képest
A generált family osztályok és az implicit notifier csatornák helyett a miniriverpod az alosztály + args + explicit invoke megközelítést részesíti előnyben.
Provider-identitás
runtimeType + args hash
family alternatíva
Származtasd a Provider / AsyncProvider osztályt, és add át a super.args((...)) hívást.
DI tartalék
Scope<T>.required + overrideWithValue
Miért fontos ez
Az egyenlőségről és az override-okról egyszerű Dart konstruktorokból is lehet következtetni, ami egyszerűvé teszi a hibakeresést és a teszteket.
Provider-identitás args-szal
Az args határozza meg a provider kulcsát, ezért azonos args ugyanazt a gyorsítótár-bejegyzést jelenti a ProviderContainerben.
Identitásszabály
Gyakorlati következmények
- Nincs szükség külön family típusra.
- Az argumentumonkénti override-ot provider példányok létrehozásával végezzük.
- Tartsd az args-t stabilan és immutábilisan a kiszámítható gyorsítótárazáshoz.
Példa: family-szerű provider + Scope tartalékpéldány
Használd a konstruktor argumentumát identitásként, és injektálj egy tartalékpéldányt a Scope-on keresztül.
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(),
);
Következő lépések
Providerek és olvasások
Nézd meg a watch/read/listen és az AsyncProvider.future konkrét mintáit.
Providerek megnyitásaMutációk
Valósíts meg állapotfrissítéseket mutation tokenekkel, mutate-tel és ref.invoke-val.
Mutációk megnyitása