Mga prinsipyo ng disenyo sa likod ng miniriverpod.

Sadyang nililimitahan ng package ang mga feature para manatiling malinaw ang pag-uugali: provider identity sa pamamagitan ng args, scoped injection, at mahuhulaang disposal semantics.

Ano ang nagbabago mula sa Riverpod

Sa halip na generated family classes at implicit notifier channels, mas gusto ng miniriverpod ang subclass + args + explicit invoke.

Pagkakakilanlan ng Provider

runtimeType + args hash

alternatibo sa family

I-subclass ang Provider / AsyncProvider at ipasa ang super.args((...))

DI fallback

Scope<T>.required + overrideWithValue

Bakit ito mahalaga

Maaari mong unawain ang equality at overrides mula sa karaniwang Dart constructors, na nagpapadali sa debugging at tests.

Pagkakakilanlan ng Provider gamit ang args

Tinutukoy ng args ang provider key, kaya ang magkaparehong args ay nangangahulugang parehong cache entry sa loob ng ProviderContainer.

Panuntunan sa identidad

Praktikal na epekto

- Hindi kailangan ng nakalaang family type.
- Ginagawa ang per-argument override sa pamamagitan ng paglikha ng provider instances.
- Panatilihing stable at immutable ang args para sa mahuhulaang caching.

Halimbawa: provider na parang family + Scope fallback

Gamitin ang constructor argument bilang identity at mag-inject ng fallback instance sa pamamagitan ng 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);
  }
}

// Inject
ProviderScope(
  overrides: [
    ProductProvider.fallback.overrideWithValue(ProductProvider(search: 'jeans')),
  ],
  child: const App(),
);
Pinananatiling malinaw at test-friendly ng Scope ang wiring ng dependency.
Gumagana ang overrideWithValue sa bawat provider instance, kabilang ang mga instance na batay sa args.
Nanatiling pareho ang autoDispose kahit gumagamit ng subclass + args.

Mga Susunod na Hakbang

Mga Provider at Reads

Tingnan ang mga konkretong pattern para sa watch/read/listen at AsyncProvider.future.

Buksan ang mga Provider

Mga Mutasyon

Magpatupad ng state updates gamit ang mutation tokens, mutate, at ref.invoke.

Buksan ang mga Mutasyon