គោលការណ៍រចនានៅពីក្រោយ 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(),
);
Scope រក្សាការភ្ជាប់ dependency ឲ្យច្បាស់លាស់ និងងាយសម្រាប់តេស្ត។
overrideWithValue ដំណើរការតាម provider instance នីមួយៗ រួមទាំង instance ផ្អែកលើ args ផងដែរ។
ឥរិយាបថ autoDispose មិនផ្លាស់ប្តូរនៅពេលប្រើ subclass + args។

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

Provider និងការអាន

មើល pattern ជាក់លាក់សម្រាប់ watch/read/listen និង AsyncProvider.future។

បើក Provider

ការកែប្រែ

អនុវត្តការធ្វើបច្ចុប្បន្នភាព state ដោយប្រើ mutation tokens, mutate និង ref.invoke។

បើកការកែប្រែ