Принсипҳои тарроҳӣ дар паси miniriverpod.
Ин баста хусусиятҳоро қасдан маҳдуд мекунад, то рафтор ошкор бошад: идентификатсияи provider бо args, дарҷкунии scope-ӣ ва семантикаи пешбинишавандаи хориҷкунӣ.
Дар муқоиса бо Riverpod чӣ тағйир меёбад
Ба ҷои class-ҳои generated family ва каналҳои ғайримустақими notifier, miniriverpod subclass + args + explicit invoke-ро авлотар мешуморад.
Идентификатсияи provider
runtimeType + hash-и args
Алтернатива ба family
Provider / AsyncProvider-ро subclass кунед ва super.args((...))-ро гузаронед.
Fallback-и DI
Scope<T>.required + overrideWithValue
Чаро ин муҳим аст
Шумо метавонед баробарӣ ва override-ҳоро аз конструкторҳои оддии Dart таҳлил кунед, ки ин debug ва тестҳоро содда нигоҳ медорад.
Идентификатсияи Provider бо args
args калиди provider-ро муайян мекунад, аз ин рӯ args-и баробар маънои ҳамон cache entry-ро дар дохили ProviderContainer дорад.
Қоидаи идентификатсия
Оқибатҳои амалӣ
- Навъи алоҳидаи family лозим нест.
- Override барои ҳар як аргумент бо сохтани instance-ҳои provider анҷом мешавад.
- Барои caching-и пешбинишаванда args-ро устувор ва immutable нигоҳ доред.
Мисол: provider-и ба family монанд + fallback-и Scope
Аргументи конструкторро ҳамчун идентификатор истифода баред ва 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);
}
}
// Дарҷ кунед
ProviderScope(
overrides: [
ProductProvider.fallback.overrideWithValue(ProductProvider(search: 'jeans')),
],
child: const App(),
);
Қадамҳои навбатӣ
Provider-ҳо ва хондан
Намунаҳои мушаххасро барои watch/read/listen ва AsyncProvider.future бинед.
Provider-ҳоро кушоедMutation-ҳо
Навсозии ҳолатро бо mutation tokens, mutate ва ref.invoke татбиқ кунед.
Mutation-ҳоро кушоед