Принсипҳои тарроҳӣ дар паси 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(),
);
Scope пайвасткунии вобастагиҳоро ошкор ва барои озмоишҳо қулай нигоҳ медорад.
overrideWithValue барои ҳар як instance-и provider кор мекунад, аз ҷумла instance-ҳои асосёфта ба args.
Рафтори autoDispose ҳангоми истифодаи subclass + args тағйир намеёбад.

Қадамҳои навбатӣ

Provider-ҳо ва хондан

Намунаҳои мушаххасро барои watch/read/listen ва AsyncProvider.future бинед.

Provider-ҳоро кушоед

Mutation-ҳо

Навсозии ҳолатро бо mutation tokens, mutate ва ref.invoke татбиқ кунед.

Mutation-ҳоро кушоед