ការរួមបញ្ចូល Flutter ជាមួយការកាន់កាប់ container យ៉ាងច្បាស់។

ProviderScope អាចគ្រប់គ្រង container ឬទទួល container ពីខាងក្រៅ។ API របស់ Consumer រក្សាការចូលប្រើ WidgetRef ឲ្យស្របគ្នាជាមួយកូដបែប Riverpod។

ការកាន់កាប់ ProviderScope

ការកាន់កាប់ container ប្ដូរភារកិច្ចការដកចេញ។

Container ខាងក្នុង

ProviderScope(child: ...) ដកចេញដោយស្វ័យប្រវត្តិ

Container ខាងក្រៅ

ProviderScope(container: c, ...) ត្រូវឲ្យអ្នកហៅ c.dispose()

Scope ដែលមិនបានគ្រប់គ្រង

UncontrolledProviderScope មិនដែលដកចេញ container ទេ

កំហុសដែលជួបញឹកញាប់

ក្នុង widget tests សូមចងចាំដកចេញ ProviderContainer ដែលបានបញ្ចូលពីខាងក្រៅ ដើម្បីជៀសវាង timer ដែលនៅសេសសល់។

បម្រែបម្រួល Consumer

ជម្រើសទាំងអស់បង្ហាញ WidgetRef; ជ្រើសតាមរចនាប័ទ្មវីដជិត និងតម្រូវការរដ្ឋមូលដ្ឋាន។

ឬសកម្មភាព

ពេលណាត្រូវប្រើមួយណា

Consumer: ប្លុក builder មូលដ្ឋានសម្រាប់តំបន់ reactive តូចៗ.
ConsumerWidget: វីដជិតគ្មាន state ជាមួយ build(context, ref).
ConsumerStatefulWidget: វីដជិតមាន state ដែលមាន ref នៅក្នុង ConsumerState.

ឧទាហរណ៍៖ ConsumerStatefulWidget

ប្រើ ConsumerState ពេលអ្នកត្រូវការ WidgetRef និង UI state ដែលអាចផ្លាស់ប្ដូរក្នុងមូលដ្ឋាន។

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 ដើម្បីកាត់បន្ថយបញ្ហា setState ពេលកំពុង build។
ប្រើ WidgetRef.watch តែសម្រាប់តម្លៃដែលគួរបង្កើត rebuild ប៉ុណ្ណោះ។
រក្សា side effect នៅក្រៅ build; ប្រើ callbacks និង invoke/refresh methods។

ជំហានបន្ទាប់

ការសាកល្បង

ផ្ទៀងផ្ទាត់ lifecycle នៃ container, overrides និងការធ្វើបច្ចុប្បន្នភាព async ក្នុង unit និង widget tests។

បើកការសាកល្បង

ឯកសារយោង API

មើល signature សម្រាប់ ProviderScope, WidgetRef និង methods របស់ container។

បើកឯកសារយោង API