គោលការណ៍រចនានៅពីក្រោយ miniriverpod។
កញ្ចប់នេះចេតនាបង្រួមមុខងារដើម្បីរក្សាឥរិយាបថឲ្យច្បាស់លាស់៖ provider identity តាម args, ការបញ្ចូលតាម Scope និងន័យនៃការដោះចេញដែលអាចព្យាករបាន។
អ្វីដែលផ្លាស់ប្តូរពី Riverpod
ជំនួសឲ្យ family classes ដែលបានបង្កើត និង notifier channels ដែលលាក់កំបាំង, miniriverpod ចូលចិត្ត subclass + args + explicit invoke។
Provider identity
runtimeType + args hash
family alternative
បង្កើត Provider / AsyncProvider ជា subclass ហើយផ្ទេរ super.args((...))
DI fallback
Scope<T>.required + overrideWithValue
ហេតុអ្វីវាសំខាន់
អ្នកអាចគិតអំពីភាពស្មើ និង override ពី constructor របស់ Dart ធម្មតា ដែលធ្វើឲ្យ debugging និង tests រក្សាសាមញ្ញ។
អត្តសញ្ញាណ Provider ជាមួយ args
args កំណត់ key របស់ provider ដូច្នេះ args ដូចគ្នា មានន័យថា cache entry ដូចគ្នានៅក្នុង ProviderContainer។
Identity rule
ផលវិបាកជាក់ស្តែង
- មិនចាំបាច់មាន family type ដាច់ដោយឡែកទេ។
- ការបម្លែង override តាមអាគុយម៉ង់ធ្វើដោយបង្កើត provider instances។
- រក្សា args ឲ្យមានស្ថិរភាព និង immutable ដើម្បីឲ្យ caching អាចព្យាករបាន។
ឧទាហរណ៍៖ provider ស្រដៀង family + fallback របស់ Scope
ប្រើ argument នៃ constructor ជាអត្តសញ្ញាណ ហើយបញ្ចូល fallback instance តាមរយៈ Scope។
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);
}
}
// Inject
ProviderScope(
overrides: [
ProductProvider.fallback.overrideWithValue(ProductProvider(search: 'jeans')),
],
child: const App(),
);
ជំហានបន្ទាប់
Provider និងការអាន
មើល pattern ជាក់លាក់សម្រាប់ watch/read/listen និង AsyncProvider.future។
បើក Providerការកែប្រែ
អនុវត្តការធ្វើបច្ចុប្បន្នភាព state ដោយប្រើ mutation tokens, mutate និង ref.invoke។
បើកការកែប្រែ