miniriverpodi disainipõhimõtted.

Pakett piirab funktsioone tahtlikult, et käitumine oleks selge: provideri identiteet args-ide põhjal, Scope'i kaudu süstimine ja etteaimatav dispose'imise semantika.

Mis muutub võrreldes Riverpodiga

Genereeritud family-klasside ja kaudsete notifier-kanalite asemel eelistab miniriverpod alamklassi + args + selget invoke'i.

Provideri identiteet

runtimeType + argsi räsi

Family'i alternatiiv

Loo Providerist / AsyncProviderist alamklass ja anna edasi super.args((...)).

DI varuvariant

Scope<T>.required + overrideWithValue

Miks see on oluline

Saad võrdsust ja override'e hinnata tavaliste Darti konstruktorite põhjal, mis muudab silumise ja testid lihtsaks.

Provideri identiteet args-ide põhjal

args määrab provideri võtme, nii et võrdsed args-väärtused tähendavad sama vahemälukirjet ProviderContaineris.

Identiteedireegel

Praktilised tagajärjed

- Eraldi family-tüüpi pole vaja.
- Argumentide kaupa override'i tehakse provideri eksemplare luues.
- Hoia args-väärtused stabiilsed ja muutmatud, et vahemälu oleks etteaimatav.

Näide: family-laadne provider + Scope'i varuvariant

Kasuta identiteedina konstruktoriargumenti ja süsti Scope'i kaudu varuvariant.

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

// Süstimine
ProviderScope(
  overrides: [
    ProductProvider.fallback.overrideWithValue(ProductProvider(search: 'jeans')),
  ],
  child: const App(),
);
Scope hoiab sõltuvuste ühenduse selge ja testisõbralikuna.
overrideWithValue töötab iga provideri eksemplari kohta, sh args-põhiste eksemplaride puhul.
autoDispose'i käitumine ei muutu, kui kasutad alamklassi + args.

Järgmised sammud

Providerid ja lugemine

Vaata konkreetseid mustreid watch/read/listen ja AsyncProvider.future jaoks.

Ava providerid

Mutatsioonid

Rakenda olekuvärskendused mutatsioonitokenite, mutate'i ja ref.invoke abil.

Ava mutatsioonid