miniriverpodin suunnitteluperiaatteet.

Paketti rajoittaa ominaisuuksia tarkoituksella, jotta kayttaytyminen pysyy selkeana: providerin identiteetti argsien perusteella, Scope-injektio ja ennustettava dispose-kayttaytyminen.

Mita muuttuu Riverpodiin verrattuna

Generoituja family-luokkia ja implisiittisia notifier-kanavia sijaan miniriverpod suosii aliluokkaa + args + selkeaa invokea.

Providerin identiteetti

runtimeType + args-hash

family-vaihtoehto

Luo Providerista / AsyncProviderista aliluokka ja anna eteenpain super.args((...)).

DI-vararatkaisu

Scope<T>.required + overrideWithValue

Miksi tama on tarkeaa

Voit paatella yhtalaisyydet ja overridet tavallisista Dart-konstruktoreista, mika pitaa debugauksen ja testit suoraviivaisina.

Providerin identiteetti argsien avulla

args maarittaa providerin avaimen, joten samat argsit tarkoittavat samaa cache-merkintaa ProviderContainerissa.

Identiteettisaanto

Kaytannolliset seuraukset

- Erillista family-tyyppia ei tarvita.
- Argumenttikohtainen override tehdaan luomalla provider-instansseja.
- Pida argsit vakaina ja muuttumattomina ennustettavaa valimuistia varten.

Esimerkki: family-tyyppinen provider + Scope-vararatkaisu

Kayta konstruktorin argumenttia identiteettina ja injektoi fallback-instanssi Scopein kautta.

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);
  }
}

// Injektointi
ProviderScope(
  overrides: [
    ProductProvider.fallback.overrideWithValue(ProductProvider(search: 'jeans')),
  ],
  child: const App(),
);
Scope pitaa riippuvuuksien kytkennan eksplisiittisena ja testiystavallisena.
overrideWithValue toimii per provider-instanssi, mukaan lukien args-pohjaiset instanssit.
autoDispose-kayttaytyminen pysyy samana, kun kaytat aliluokkaa + args.

Seuraavat askeleet

Providerit ja lukeminen

Katso konkreettisia malleja watch/read/listen- ja AsyncProvider.future-kayttoon.

Avaa providerit

Mutaatiot

Toteuta tilapaivitykset mutation-tokenien, mutate-toiminnon ja ref.invoke-kutsun avulla.

Avaa mutaatiot