miniriverpod-тың артындағы жобалау қағидалары.

Пакет мінез-құлықты айқын ұстау үшін мүмкіндіктерді әдейі тарылтады: args бойынша provider идентификаторы, Scope арқылы scope-талған енгізу және алдын ала болжанатын жою семантикасы.

Riverpod-пен салыстырғанда не өзгереді

Генерацияланған family кластары мен implicit notifier арналар орнына miniriverpod subclass + args + explicit invoke тәсілін артық көреді.

Provider идентификаторы

runtimeType + args hash

family баламасы

Provider / AsyncProvider-ды subclass етіп, super.args((...)) беріңіз.

DI резерві

Scope<T>.required + overrideWithValue

Неліктен бұл маңызды

Қарапайым Dart конструкторларынан теңдік пен override-тарды түсінуге болады, бұл debugging пен tests-ті қарапайым етеді.

args-пен provider идентификаторы

args provider кілтін анықтайды, сондықтан бірдей args ProviderContainer ішіндегі бір cache жазбасын білдіреді.

Идентификатор ережесі

Практикалық салдарлар

- Арнайы family түрі қажет емес.
- Әр аргумент үшін override provider даналарын құру арқылы жасалады.
- Алдын ала болжанатын кэштеу үшін args тұрақты әрі immutable болсын.

Мысал: family-ге ұқсас provider + Scope резерві

Constructor аргументін идентификатор ретінде пайдаланып, 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);
  }
}

// Енгізу
ProviderScope(
  overrides: [
    ProductProvider.fallback.overrideWithValue(ProductProvider(search: 'jeans')),
  ],
  child: const App(),
);
Scope тәуелділіктерді байланыстыруды айқын әрі тестке ыңғайлы күйде ұстайды.
overrideWithValue әр provider данасы үшін, args негізіндегі даналарды қоса, жұмыс істейді.
autoDispose мінез-құлқы subclass + args қолданғанда өзгермейді.

Келесі қадамдар

Provider-лар және оқулар

watch/read/listen және AsyncProvider.future үшін нақты үлгілерді көріңіз.

Provider-ларды ашу

Mutations

Mutation token-дар, mutate және ref.invoke арқылы күй жаңартуларын іске асырыңыз.

Mutations ашу