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: သေးငယ်သော reactive နေရာများအတွက် ဒေသတွင်း builder block.
ConsumerWidget: build(context, ref) ပါသော stateless widget.
ConsumerStatefulWidget: ConsumerState အတွင်း ref ပါသော stateful widget.
ဥပမာ - 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),
),
],
);
}
}
နောက်တစ်ဆင့်များ
စမ်းသပ်မှု
container ၏ life cycle, overrides နှင့် async updates များကို unit နှင့် widget tests တွင် စစ်ဆေးပါ။
စမ်းသပ်မှု ဖွင့်ရန်API ကိုးကား
ProviderScope, WidgetRef, နှင့် container methods များ၏ signatures ကို ကြည့်ပါ။
API ကိုးကား ဖွင့်ရန်