miniriverpod ortidagi dizayn tamoyillari.

Bu paket xatti-harakatni aniq saqlash uchun imkoniyatlarni ataylab qisqartiradi: args orqali provider identifikatsiyasi, scope ichida kiritish va oldindan aytish mumkin bo'lgan disposal semantikasi.

Riverpod ga nisbatan nima o'zgaradi

Yaratilgan family class'lar va implicit notifier channel'lar o'rniga miniriverpod subclass + args + explicit invoke ni afzal ko'radi.

Provider identifikatsiyasi

runtimeType + args hash

family ga alternativ

Provider / AsyncProvider ni subclass qiling va super.args((...)) ni uzating

DI fallback

Scope<T>.required + overrideWithValue

Nega bu muhim

Oddiy Dart constructor'laridan equality va override'lar haqida fikr yuritish mumkin, bu debugging va testlarni sodda qiladi.

args bilan Provider identifikatsiyasi

args provider key ni belgilaydi, shuning uchun bir xil args ProviderContainer ichida bir xil cache entry degani.

Identifikatsiya qoidasi

Amaliy oqibatlar

- Alohida family type kerak emas.
- Har bir argument uchun override provider instances yaratish orqali qilinadi.
- Kutiladigan caching uchun args ni barqaror va o'zgarmas holda saqlang.

Misol: family-ga o'xshash provider + Scope fallback

Constructor argument ni identifikator sifatida ishlating va Scope orqali fallback instance kiritib qo'ying.

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

// Kiritish
ProviderScope(
  overrides: [
    ProductProvider.fallback.overrideWithValue(ProductProvider(search: 'jeans')),
  ],
  child: const App(),
);
Scope dependency wiring ni aniq va testga qulay holda saqlaydi.
overrideWithValue har bir provider instance uchun ishlaydi, args-based instance'lar ham kiradi.
subclass + args ishlatish autoDispose xatti-harakatini o'zgartirmaydi.

Keyingi qadamlar

Provider'lar va o'qish

watch/read/listen va AsyncProvider.future uchun aniq pattern'larni ko'ring.

Provider'larni ochish

Mutation'lar

mutation token'lar, mutate va ref.invoke yordamida state update'larni amalga oshiring.

Mutation'larni ochish