Dizaino principai, slypintys už miniriverpod.

Šis paketas sąmoningai siaurina galimybes, kad elgsena išliktų aiški: providerio tapatybė pagal args, įterpimas per Scope ir nuspėjama atlaisvinimo semantika.

Kas keičiasi lyginant su Riverpod

Vietoje sugeneruotų family klasių ir implicit notifier kanalų miniriverpod teikia pirmenybę poklasiui + args + aiškiam invoke.

Providerio tapatybė

runtimeType + args hash

family alternatyva

Paveldėkite Provider / AsyncProvider ir perduokite super.args((...))

DI atsarginis variantas

Scope<T>.required + overrideWithValue

Kodėl tai svarbu

Apie lygybę ir override galite samprotauti iš paprastų Dart konstruktorių, todėl derinimas ir testai išlieka paprasti.

Providerio tapatybė su args

args apibrėžia providerio raktą, todėl vienodi args reiškia tą patį cache įrašą ProviderContainer viduje.

Tapatybės taisyklė

Praktinės pasekmės

- Specialaus family tipo nereikia.
- Override pagal argumentą daromas sukuriant providerio egzempliorius.
- Laikykite args stabilius ir nekeičiamus, kad cache būtų nuspėjamas.

Pavyzdys: family tipo providerį primenantis provideris + Scope atsarginis variantas

Naudokite konstruktoriaus argumentą kaip tapatybę ir per Scope įterpkite atsarginį egzempliorių.

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

// Įterpimas
ProviderScope(
  overrides: [
    ProductProvider.fallback.overrideWithValue(ProductProvider(search: 'jeans')),
  ],
  child: const App(),
);
Scope išlaiko priklausomybių sujungimą aiškų ir patogų testavimui.
overrideWithValue veikia kiekvienam providerio egzemplioriui, įskaitant egzempliorius pagal args.
autoDispose elgsena nesikeičia naudojant poklasį + args.

Kiti žingsniai

Provideriai ir skaitymas

Peržiūrėkite konkrečius watch/read/listen ir AsyncProvider.future modelius.

Atidaryti providerius

Mutacijos

Įgyvendinkite būsenos atnaujinimus naudodami mutation tokenus, mutate ir ref.invoke.

Atidaryti mutacijas