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(),
);
A Scope explicit és tesztbarát módon tartja a függőségek bekötését.
Az overrideWithValue providerpéldányonként működik, beleértve az args-alapú példányokat is.
Az autoDispose viselkedése változatlan marad, ha alosztályt + args-t használsz.

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ása

Mutációk

Valósíts meg állapotfrissítéseket mutation tokenekkel, mutate-tel és ref.invoke-val.

Mutációk megnyitása