miniriverpod-ിന് പിന്നിലെ ഡിസൈൻ തത്വങ്ങൾ.
പാക്കേജ് പെരുമാറ്റം വ്യക്തമായി നിലനിർത്താനായി സവിശേഷതകൾ ഉദ്ദേശപൂർവ്വം കുറയ്ക്കുന്നു: args അടിസ്ഥാനമാക്കിയുള്ള provider identity, Scope വഴി scope ചെയ്ത injection, പ്രവചനയോഗ്യമായ disposal semantics.
Riverpod-ിൽ നിന്ന് എന്താണ് മാറുന്നത്
ജനറേറ്റ് ചെയ്ത family classes ഉം implicit 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
ഇത് എന്തുകൊണ്ട് പ്രധാനമാണ്
സാധാരണ Dart constructors-ൽ നിന്നുതന്നെ equality, overrides എന്നിവയെക്കുറിച്ച് മനസ്സിലാക്കാം, അത് debugging-നും tests-നും ലളിതത്വം നൽകുന്നു.
args ഉപയോഗിച്ചുള്ള Provider തിരിച്ചറിയൽ
args provider key നിർവചിക്കുന്നു, അതിനാൽ ഒരേ args എന്നു പറഞ്ഞാൽ ProviderContainer ഉള്ളിലെ അതേ cache entry തന്നെയാണ്.
Identity rule
പ്രായോഗിക ഫലങ്ങൾ
- പ്രത്യേക family type ആവശ്യമില്ല.
- ഓരോ argument-നുമുള്ള override provider instances സൃഷ്ടിച്ചാണ് ചെയ്യുന്നത്.
- പ്രവചനയോഗ്യമായ caching-ിനായി args സ്ഥിരവും മാറ്റമില്ലാത്തതുമായിരിക്കണം.
ഉദാഹരണം: family പോലെയുള്ള provider + Scope fallback
ഒരു constructor argument-നെ identity ആയി ഉപയോഗിച്ച് Scope വഴി ഒരു fallback instance inject ചെയ്യുക.
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);
}
}
// ഇൻജക്റ്റ് ചെയ്യുക
ProviderScope(
overrides: [
ProductProvider.fallback.overrideWithValue(ProductProvider(search: 'jeans')),
],
child: const App(),
);
അടുത്ത ഘട്ടങ്ങൾ
പ്രൊവൈഡറുകളും വായനയും
watch/read/listen, AsyncProvider.future എന്നിവയ്ക്കായുള്ള വ്യക്തമായ patterns കാണുക.
പ്രൊവൈഡറുകൾ തുറക്കുകമ്യൂട്ടേഷനുകൾ
mutation tokens, mutate, ref.invoke എന്നിവ ഉപയോഗിച്ച് state updates നടപ്പിലാക്കുക.
മ്യൂട്ടേഷനുകൾ തുറക്കുക