د miniriverpod تر شا د ډیزاین اصول.
دا package په قصدي ډول ځانګړنې محدودوي تر څو چلند روښانه پاتې شي: د args له لارې د provider پېژندنه، scoped تزریق، او د disposal وړاندوینه کېدونکي semantics.
له Riverpod څخه څه بدلېږي
د generated 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 constructorونو له لارې د equality او overrides په اړه استدلال وکړئ، چې debugging او tests ساده ساتي.
د args سره د Provider پېژندنه
args د provider key ټاکي، نو مساوي args د ProviderContainer دننه د cache هماغه entry معنا لري.
Identity rule
عملي پایلې
- جلا family ډول ته اړتیا نشته.
- د هر argument لپاره override د provider instance جوړولو له لارې کېږي.
- د وړاندوینې کېدونکي caching لپاره args ثابت او immutable وساتئ.
بېلګه: family ته ورته provider + د Scope fallback
د constructor argument د پېژندنې په توګه وکاروئ او د Scope له لارې یو fallback instance تزریق کړئ.
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(),
);
راتلونکی ګامونه
Providers او Reads
د watch/read/listen او AsyncProvider.future لپاره عیني نمونې وګورئ.
Providers پرانیزئMutations
د mutation tokens، mutate، او ref.invoke په کارولو سره state updates پلي کړئ.
Mutations پرانیزئ