د miniriverpod تر شا د ډیزاین اصول.

دا package په قصدي ډول ځانګړنې محدودوي تر څو چلند روښانه پاتې شي: د args له لارې د provider پېژندنه، scoped تزریق، او د disposal وړاندوینه کېدونکي semantics.

له Riverpod څخه څه بدلېږي

د generated family classes او implicit notifier channels پر ځای، miniriverpod د subclass + args + explicit invoke تګلاره غوره کوي.

Provider identity

runtimeType + args hash

family alternative

Provider / AsyncProvider subclass کړئ او super.args((...)) ورکړئ

DI fallback

Scope<T>.required + overrideWithValue

ولې دا مهمه ده

تاسو کولی شئ د عادي Dart constructorونو له لارې د equality او overrides په اړه استدلال وکړئ، چې debugging او tests ساده ساتي.

د args سره د Provider پېژندنه

args د provider key ټاکي، نو مساوي args د ProviderContainer دننه د cache هماغه entry معنا لري.

Identity rule

عملي پایلې

- جلا family ډول ته اړتیا نشته.
- د هر argument لپاره override د provider instance جوړولو له لارې کېږي.
- د وړاندوینې کېدونکي caching لپاره args ثابت او immutable وساتئ.

بېلګه: family ته ورته provider + د Scope fallback

د constructor argument د پېژندنې په توګه وکاروئ او د Scope له لارې یو fallback instance تزریق کړئ.

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

// Inject
ProviderScope(
  overrides: [
    ProductProvider.fallback.overrideWithValue(ProductProvider(search: 'jeans')),
  ],
  child: const App(),
);
Scope د dependency wiring روښانه او د ازموینې لپاره اسانه ساتي.
overrideWithValue د هر provider instance لپاره کار کوي، د args پر بنسټ instance-ګانو په ګډون.
د subclass + args کارول د autoDispose چلند نه بدلوي.

راتلونکی ګامونه

Providers او Reads

د watch/read/listen او AsyncProvider.future لپاره عیني نمونې وګورئ.

Providers پرانیزئ

Mutations

د mutation tokens، mutate، او ref.invoke په کارولو سره state updates پلي کړئ.

Mutations پرانیزئ