miniriverpod ၏ ဒီဇိုင်းမူဝါဒများ.

အပြုအမူကို ရှင်းလင်းအောင် ထားရှိရန် package သည် features များကို ရည်ရွယ်ချက်ရှိရှိ လျှော့ချထားသည်: args ဖြင့် provider identity, Scope မှတစ်ဆင့် scoped injection, နှင့် ခန့်မှန်းနိုင်သော disposal semantics.

Riverpod မှ ဘာတွေ ပြောင်းလဲသလဲ

ထုတ်လုပ်ထားသော family classes နှင့် implicit notifier channels များအစား miniriverpod သည် subclass + args + explicit invoke ကို ဦးစားပေးသည်။

Provider identity

runtimeType + args hash

family အစားထိုး

Provider / AsyncProvider ကို subclass လုပ်ပြီး super.args((...)) ကို pass လုပ်ပါ

DI fallback

Scope<T>.required + overrideWithValue

ဤအရာသည် အဘယ်ကြောင့် အရေးကြီးသနည်း

သာမန် Dart constructors များမှ equality နှင့် overrides ကို အကြောင်းပြနိုင်သည်၊ ထိုကြောင့် debugging နှင့် tests များ ရိုးရှင်းနေသည်။

args ဖြင့် Provider identity

args သည် provider key ကို သတ်မှတ်ပေးသောကြောင့် args တူလျှင် ProviderContainer အတွင်း cache entry တူညီသည်။

Identity rule

လက်တွေ့အကျိုးဆက်များ

- family type သီးသန့် မလိုအပ်ပါ။
- argument တစ်ခုချင်း override ကို provider instances ဖန်တီး၍ လုပ်ဆောင်သည်။
- ခန့်မှန်းနိုင်သော caching အတွက် args ကို တည်ငြိမ်ပြီး immutable အဖြစ် ထားပါ။

ဥပမာ: family ဆန်သော provider + Scope fallback

constructor argument ကို identity အဖြစ် အသုံးပြုပြီး 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);
  }
}

// ထည့်သွင်းခြင်း
ProviderScope(
  overrides: [
    ProductProvider.fallback.overrideWithValue(ProductProvider(search: 'jeans')),
  ],
  child: const App(),
);
Scope သည် dependency wiring ကို ရှင်းလင်းပြီး test-friendly ဖြစ်အောင် ထိန်းပေးသည်။
overrideWithValue သည် args-based instances အပါအဝင် provider instance တစ်ခုချင်းစီအတွက် အလုပ်လုပ်သည်။
subclass + args သုံးလျှင် autoDispose အပြုအမူ မပြောင်းလဲပါ။

နောက်ထပ်အဆင့်များ

Provider များနှင့် ဖတ်ရှုခြင်း

watch/read/listen နှင့် AsyncProvider.future အတွက် တိကျသော ပုံစံများကို ကြည့်ပါ။

Provider များ ဖွင့်ရန်

ပြောင်းလဲမှုများ

mutation token, mutate, နှင့် ref.invoke ဖြင့် state updates ကို အကောင်အထည်ဖော်ပါ။

Mutations ဖွင့်ရန်