container ပိုင်ဆိုင်မှုကို အတိအကျ သတ်မှတ်ထားသော Flutter ပေါင်းစည်းမှု။

ProviderScope သည် container ကို ကိုယ်တိုင်ပိုင်ဆိုင်နိုင်သလို အပြင်မှလည်း ရယူနိုင်သည်။ Consumer API များက WidgetRef အသုံးပြုမှုကို Riverpod ပုံစံကုဒ်နှင့် ကိုက်ညီစေသည်။

ProviderScope ပိုင်ဆိုင်မှု

container ပိုင်ဆိုင်မှုသည် disposal တာဝန်ကို ပြောင်းလဲစေသည်။

အတွင်းပိုင်း container

ProviderScope(child: ...) သည် အလိုအလျောက် dispose လုပ်သည်

ပြင်ပ container

ProviderScope(container: c, ...) အတွက် caller က c.dispose() လုပ်ရမည်

ထိန်းချုပ်မထားသော scope

UncontrolledProviderScope သည် container ကို ဘယ်တော့မှ dispose မလုပ်ပါ

မကြာခဏ တွေ့ရသော အမှား

widget tests တွင် ပြင်ပမှ ထည့်သွင်းထားသော ProviderContainer ကို dispose လုပ်ရန် မမေ့ပါနှင့်၊ မပြီးဆုံးသေးသော timer leak များကို ရှောင်ရှားရန်ဖြစ်သည်။

Consumer မျိုးကွဲများ

ရွေးချယ်စရာအားလုံးသည် WidgetRef ကို ဖော်ထုတ်ပေးသည်; widget ပုံစံနှင့် ဒေသတွင်း state လိုအပ်ချက်အပေါ် မူတည်၍ ရွေးချယ်ပါ။

အက်ပ် root

တစ်ခုချင်းစီကို မည်သည့်အချိန်တွင် သုံးမည်

Consumer: local builder block for small reactive areas.
ConsumerWidget: stateless widget with build(context, ref).
ConsumerStatefulWidget: stateful widget with ref inside ConsumerState.

ဥပမာ - ConsumerStatefulWidget

WidgetRef နှင့် ဒေသတွင်း mutable UI state နှစ်မျိုးလုံး လိုအပ်သည့်အခါ ConsumerState ကို သုံးပါ။

class HomePage extends ConsumerStatefulWidget {
  const HomePage({super.key});

  @override
  ConsumerState<HomePage> createState() => _HomePageState();
}

class _HomePageState extends ConsumerState<HomePage> {
  bool expanded = false;

  @override
  Widget build(BuildContext context) {
    final user = ref.watch(currentUser);
    return Column(
      children: [
        Text('$user'),
        Switch(
          value: expanded,
          onChanged: (v) => setState(() => expanded = v),
        ),
      ],
    );
  }
}
Consumer အတွင်းပိုင်းသည် rebuild များကို frame ပြီးနောက်သို့ စီစဉ်ပေးသဖြင့် build အတွင်း setState ခေါ်မှုဆိုင်ရာ ပြဿနာများကို လျှော့ချနိုင်သည်။
rebuild ကို ဖြစ်စေသင့်သော တန်ဖိုးများအတွက်သာ WidgetRef.watch ကို သုံးပါ။
side effect များကို build အပြင်ဘက်တွင် ထားပါ; callback များနှင့် invoke/refresh နည်းလမ်းများကို သုံးပါ။

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

စမ်းသပ်မှု

container ၏ life cycle, overrides နှင့် async updates များကို unit နှင့် widget tests တွင် စစ်ဆေးပါ။

စမ်းသပ်မှု ဖွင့်ရန်

API ကိုးကား

ProviderScope, WidgetRef, နှင့် container methods များ၏ signatures ကို ကြည့်ပါ။

API ကိုးကား ဖွင့်ရန်