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(),
);
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ç