Açıq iş vaxtı davranışı ilə Riverpod tərzli rahatlıq.

Paket davranışı açıq saxlamaq üçün xüsusiyyətləri qəsdən daraldır: args ilə provider identikliyi, scope əsaslı injeksiya və proqnozlaşdırıla bilən dispose semantikası.

Riverpod-dan nə dəyişir

Yaradılmış family sinifləri və gizli notifier kanalları əvəzinə, miniriverpod subclass + args + açıq invoke yanaşmasına üstünlük verir.

Provider identikliyi

runtimeType + args hash

family alternativi

Provider / AsyncProvider-ı subclass edin və super.args((...)) ötürün

DI ehtiyatı

Scope<T>.required + overrideWithValue

Niyə vacibdir

Sadə Dart konstruktorlarından istifadə edərək bərabərlik və override-lər haqqında düşünə bilərsiniz; bu, sazlamanı və testləri sadə saxlayır.

args ilə Provider identikliyi

args provider açarını təyin edir, buna görə də eyni args ProviderContainer daxilində eyni keş qeydi deməkdir.

İdentiklik qaydası

Praktik nəticələr

- Xüsusi family tipi tələb olunmur.
- Hər arqument üçün override provider nümunələri yaradılaraq edilir.
- Proqnozlaşdırıla bilən keşləmə üçün args sabit və dəyişməz saxlanılmalıdır.

Nümunə: family tipli provider + Scope ehtiyatı

İdentiklik üçün konstruktor arqumentindən istifadə edin və Scope vasitəsilə ehtiyat nümunə daxil 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);
  }
}

// Daxil et
ProviderScope(
  overrides: [
    ProductProvider.fallback.overrideWithValue(ProductProvider(search: 'jeans')),
  ],
  child: const App(),
);
Scope asılılıq əlaqələndirməsini açıq və test dostu saxlayır.
overrideWithValue hər provider nümunəsi üçün işləyir, o cümlədən args əsaslı nümunələr üçün.
subclass + args istifadə etdikdə autoDispose davranışı dəyişmir.

Növbəti addımlar

Provider-lər və oxunuşlar

watch/read/listen və AsyncProvider.future üçün konkret nümunələrə baxın.

Provider-ləri aç

Mutasiyalar

mutation tokenləri, mutate və ref.invoke ilə vəziyyət yeniləmələrini həyata keçirin.

Mutasiyaları aç