Dizajnerska načela iza miniriverpoda.

Paket namjerno sužava mogućnosti kako bi ponašanje ostalo eksplicitno: identitet providera prema args, injektiranje kroz Scope i predvidiva semantika oslobađanja.

Što se mijenja u odnosu na Riverpod

Umjesto generiranih family klasa i implicitnih notifier kanala, miniriverpod preferira podklasu + args + eksplicitni invoke.

Identitet providera

runtimeType + args hash

alternativa za family

Podklasirajte Provider / AsyncProvider i proslijedite super.args((...))

DI rezervna vrijednost

Scope<T>.required + overrideWithValue

Zašto je ovo važno

O jednakosti i overrideovima možete zaključivati iz običnih Dart konstruktora, što debugging i testove čini jednostavnima.

Identitet providera s args

args definira ključ providera, pa jednaki args znači isti cache unos unutar ProviderContainera.

Pravilo identiteta

Praktične posljedice

- Nije potreban poseban family tip.
- Override po argumentu radi se stvaranjem instanci providera.
- Držite args stabilnima i nepromjenjivima za predvidivo keširanje.

Primjer: provider sličan family + Scope rezervna instanca

Koristite argument konstruktora kao identitet i umetnite rezervnu instancu kroz Scope.

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(),
);
Scope održava povezivanje ovisnosti eksplicitnim i pogodnim za testiranje.
overrideWithValue radi po instanci providera, uključujući instance temeljene na args.
Ponašanje autoDispose ostaje isto pri korištenju podklase + args.

Sljedeći koraci

Provideri i čitanje

Pogledajte konkretne obrasce za watch/read/listen i AsyncProvider.future.

Otvori providere

Mutacije

Implementirajte ažuriranja stanja pomoću mutation tokena, mutate i ref.invoke.

Otvori mutacije