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(),
);
Scope ആശ്രയ ബന്ധങ്ങളെ വ്യക്തമായി നിലനിർത്തുകയും ടെസ്റ്റുകൾക്ക് അനുയോജ്യമാക്കുകയും ചെയ്യുന്നു.
overrideWithValue provider instance തോറും പ്രവർത്തിക്കുന്നു, args അധിഷ്ഠിത instance-ുകൾ ഉൾപ്പെടെ.
subclass + args ഉപയോഗിച്ചാലും autoDispose പെരുമാറ്റം മാറ്റമില്ലാതെ തുടരും.

അടുത്ത ഘട്ടങ്ങൾ

പ്രൊവൈഡറുകളും വായനയും

watch/read/listen, AsyncProvider.future എന്നിവയ്‌ക്കായുള്ള വ്യക്തമായ patterns കാണുക.

പ്രൊവൈഡറുകൾ തുറക്കുക

മ്യൂട്ടേഷനുകൾ

mutation tokens, mutate, ref.invoke എന്നിവ ഉപയോഗിച്ച് state updates നടപ്പിലാക്കുക.

മ്യൂട്ടേഷനുകൾ തുറക്കുക