miniriverpod'un arkasındaki tasarım ilkeleri.

Bu paket davranışı açık tutmak için özellikleri bilinçli olarak daraltır: args ile provider kimliği, scope içi enjeksiyon ve öngörülebilir disposal semantiği.

Riverpod'a göre ne değişir

Oluşturulan family sınıfları ve örtük notifier kanalları yerine miniriverpod, subclass + args + açık invoke yaklaşımını tercih eder.

Provider kimliği

runtimeType + args hash

family alternatifi

Provider / AsyncProvider'ı subclass edin ve super.args((...)) ile geçin.

DI yedeği

Scope<T>.required + overrideWithValue

Bu neden önemli

Düz Dart constructor'larından eşitlik ve override'ları akıl yürütebilirsiniz; bu da debug etmeyi ve testleri sade tutar.

args ile Provider kimliği

args, provider anahtarını tanımlar; bu yüzden eşit args, ProviderContainer içinde aynı cache girdisi anlamına gelir.

Kimlik kuralı

Pratik sonuçlar

- Ayrı bir family türü gerekmez.
- Argümana göre override, provider örnekleri oluşturularak yapılır.
- Öngörülebilir cache için args değerlerini sabit ve değişmez tutun.

Örnek: family benzeri provider + Scope yedeği

Bir constructor argümanını kimlik olarak kullanın ve Scope aracılığıyla bir yedek örnek enjekte edin.

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);
  }
}

// Enjekte et
ProviderScope(
  overrides: [
    ProductProvider.fallback.overrideWithValue(ProductProvider(search: 'jeans')),
  ],
  child: const App(),
);
Scope, bağımlılık bağlamasını açık ve test dostu tutar.
overrideWithValue, args tabanlı örnekler dahil olmak üzere her provider örneği için çalışır.
subclass + args kullanmak autoDispose davranışını değiştirmez.

Sonraki Adımlar

Provider'lar ve okumalar

watch/read/listen ve AsyncProvider.future için somut kalıplara bakın.

Provider'ları Aç

Mutasyonlar

mutation token'ları, mutate ve ref.invoke kullanarak durum güncellemelerini uygulayın.

Mutasyonları Aç