miniriverpod артындагы дизайн принциптери.

Пакет жүрүм-турумду ачык кармоо үчүн функцияларды атайылап чектейт: args боюнча провайдер идентификатору, Scope аркылуу инъекция жана алдын ала болжолдоого мүмкүн болгон жок кылуу семантикасы.

Riverpodдон эмнелер өзгөрөт

Жаратылган family класстары жана жашыруун notifier каналдарынын ордуна, miniriverpod subclass + args + explicit invoke ыкмасын артык көрөт.

Провайдер идентификатору

runtimeType + args hash

family альтернативасы

Provider / AsyncProvider'ды subclass кылып, super.args((...)) өткөрүңүз.

DI fallback

Scope<T>.required + overrideWithValue

Эмне үчүн бул маанилүү

Жөн гана Dart constructor'лорунан теңдик жана override жөнүндө ой жүгүртө аласыз, бул debugging менен тесттерди жөнөкөй кылат.

args менен Провайдер идентификаторы

args провайдердин ачкычын аныктайт, ошондуктан args бирдей болсо, ProviderContainer ичиндеги cache entry да бирдей болот.

Идентификатор эрежеси

Практикалык кесепеттер

- Өзүнчө family түрү талап кылынбайт.
- Аргумент боюнча override провайдер instance'терин түзүү менен жасалат.
- Алдын ала болжолдуу кэш үчүн args туруктуу жана immutable болсун.

Мисал: family сыяктуу провайдер + Scope fallback

Constructor аргументин идентификатор катары колдонуп, 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);
  }
}

// Киргизүү
ProviderScope(
  overrides: [
    ProductProvider.fallback.overrideWithValue(ProductProvider(search: 'jeans')),
  ],
  child: const App(),
);
Scope көз карандылыктардын байланышын ачык жана тестке ыңгайлуу кылып сактайт.
overrideWithValue ар бир провайдер instance үчүн иштейт, анын ичинде args негизиндеги instance'тер үчүн да.
subclass + args колдонгондо autoDispose жүрүм-туруму өзгөрбөйт.

Кийинки кадамдар

Провайдерлер жана окуулар

watch/read/listen жана AsyncProvider.future үчүн конкреттүү ыкмаларды көрүңүз.

Провайдерлерди ачуу

Mutation'дар

mutation token'дор, mutate жана ref.invoke аркылуу state жаңыртууларын ишке ашырыңыз.

Mutation'дарды ачуу