ဖတ်ရှုလမ်းကြောင်းများ: watch, read နှင့် listen။

Provider သည် synchronous state ပေးသည်။ AsyncProvider သည် AsyncValue ကို ပြန်ပေးပြီး strict lifecycle handling ဖြင့် Future နှင့် Stream ကို ဖော်ပြနိုင်သည်။

Provider အမျိုးအစားများ

data source နှင့် update frequency အပေါ်မူတည်၍ provider type ကို ရွေးချယ်ပါ။

Provider<T>

Synchronous values နှင့် local derived state

AsyncProvider<T>

Future/Stream ဖြင့် မောင်းနှင်သော state ကို AsyncValue<T> အဖြစ်

provider.future

Provider<Future<T>> ကို expose လုပ်သော selector

အကြံပြုချက်

state သည် network သို့မဟုတ် stream မှလာလျှင် အရင် AsyncProvider ကို ရွေးပါ။ Provider ကို pure synchronous logic အတွက် ထားပါ။

ဖတ်ရှု API matrix

build paths တွင် watch ကို၊ one-shot access အတွက် read ကို၊ side effects အတွက် listen ကို အသုံးပြုပါ။

အများဆုံးအသုံးများ

watch / read / listen

ref.watch(provider)  : subscribe and rebuild when value changes.
ref.read(provider)   : read current snapshot without subscribing.
container.listen(...) : callback-driven updates; optional fireImmediately.

AsyncProvider နှင့် Future နှင့် Stream

AsyncProvider တစ်ခုသည် Future ကို ပြန်ပေးနိုင်သလို ref.emit(stream) ဖြင့် Stream ကိုလည်း ချိတ်ဆက်နိုင်သည်။

final currentUser = AsyncProvider<User>((ref) async {
  final api = ref.watch(apiProvider);
  return api.me();
});

final liveUser = AsyncProvider<User>((ref) {
  final stream = ref.watch(apiProvider).live();
  ref.emit(stream);
  return const User(name: 'Loading...');
}, autoDispose: true, autoDisposeDelay: const Duration(milliseconds: 250));

// Await as Future
final user = await ref.watch(currentUser.future);
ref.emit(stream) သည် rebuild, invalidate နှင့် dispose အချိန်တွင် ယခင် subscription ကို ဖယ်ရှားပေးသည်။
AsyncValue သည် sealed class တစ်ခုဖြစ်သည်: AsyncLoading / AsyncData / AsyncError။
switch နှင့် pattern matching သည် loading/error UI ကို ထင်ရှားစေသည်။

နောက်တစ်ဆင့်များ

Mutations

write operations ကို provider methods ထဲသို့ ရွှေ့ပြီး ref.invoke ဖြင့် လုပ်ဆောင်ပါ။

Flutter API ဖွင့်ရန်

Flutter API

Consumer, ConsumerWidget, နှင့် ConsumerStatefulWidget အကြား ရွေးချယ်ပါ။

API Reference ဖွင့်ရန်