Principi dizajna iza miniriverpoda.

Paket namerno sužava mogućnosti kako bi ponašanje ostalo eksplicitno: identitet provajdera preko args, injekcija kroz Scope i predvidiva semantika oslobađanja.

Šta se menja u odnosu na Riverpod

Umesto generisanih family klasa i implicitnih kanala notifikacija, miniriverpod preferira subclass + args + eksplicitni invoke.

Identitet provajdera

runtimeType + args hash

Alternativa za family

Nasledite Provider / AsyncProvider i prosledite super.args((...))

DI rezervna opcija

Scope<T>.required + overrideWithValue

Zašto je ovo važno

Možete rezonovati o jednakosti i override-ovima iz običnih Dart konstruktora, što održava debagovanje i testove jednostavnim.

Identitet provajdera sa args

args definiše ključ provajdera, pa jednaki args znače isti cache zapis unutar ProviderContainer-a.

Pravilo identiteta

Praktične posledice

- Nije potreban poseban family tip.
- Nadjačavanje po argumentu radi se kreiranjem instanci provajdera.
- Držite args stabilnim i nepromenljivim radi predvidivog keširanja.

Primer: provider nalik family + Scope rezervna opcija

Koristite argument konstruktora kao identitet i ubacite 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);
  }
}

// Umetni
ProviderScope(
  overrides: [
    ProductProvider.fallback.overrideWithValue(ProductProvider(search: 'jeans')),
  ],
  child: const App(),
);
Scope održava povezivanje zavisnosti eksplicitnim i pogodnim za testiranje.
overrideWithValue radi po instanci provajdera, uključujući i instance zasnovane na args.
Ponašanje autoDispose ostaje nepromenjeno korišćenjem subclass + args.

Sledeći koraci

Provajderi i čitanje

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

Otvori provajdere

Mutacije

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

Otvori mutacije