Müqayisə və seçimin əsaslandırılması
Müsahibədə "hansı state management?" sualının məqsədi library adı deyil — qərar prosesini görməkdir. Güclü cavabın strukturu:
1. Kontekst soruş (komanda, məhsulun ömrü, async payı, audit tələbi). 2. Kriteriyaları adlandır. 3. Qərarı ver və rədd edilən alternativin səbəbini göstər. 4. Riski adlandır və onu necə azaltdığını de. 5. Rəsmi mövqeyə istinad et: Flutter komandası vahid tövsiyə vermir — seçim tətbiqin mürəkkəbliyi, komandanın seçimləri və həll edilməli problemlərdən asılıdır.
| Sual | Provider | Riverpod 3 | BLoC / Cubit |
|---|---|---|---|
| Öyrənmə əyrisi | Aşağı | Orta (yeni mental model) | Orta-yüksək (event/state disiplini) |
| Async state | Əl ilə bayraqlar | `AsyncValue` hazır | State modelində status/sealed |
| Səhv provider oxumaq | Runtime xətası | Kompilyasiya səviyyəsində görünür | Runtime xətası |
| Test: asılılığı əvəz etmək | Ağacı əl ilə qurmaq | `overrides` — bir sətir | `bloc_test`, `MockBloc`, `whenListen` |
| State ardıcıllığının testi | Əl ilə listener | `container.listen` | `blocTest(expect: ...)` — ən hazır forma |
| Audit / event jurnalı | Əl ilə | Observer-lər | `BlocObserver` + `onTransition` |
| Debounce / concurrency idarəsi | Əl ilə | Əl ilə (və ya `select`/`autoDispose` ilə dolayı) | `EventTransformer` + `bloc_concurrency` |
| DI üçün rəsmi tövsiyə | Rəsmi case study bunu seçir | Provider qrafı DI rolunu da oynayır | `RepositoryProvider` (daxildə provider) |
Müsahibədə diqqət çəkən bir fakt: flutter_bloc BlocProvider, MultiBlocProvider və RepositoryProvider-i package:provider ilə həyata keçirir və onun context.read/watch/select extension-larını yenidən export edir. Deməli "Provider yoxsa BLoC?" sualı mexanizm sualı deyil — disiplin və konvensiya sualıdır. Bu cavab müqayisəni səthi müstəvidən çıxarır.
Hazır arqument dəstləri (müsahibədə birbaşa istifadə üçün):
- Niyə Riverpod? — Async state hazır gəlir (
AsyncValue), asılılıqlaroverridesilə testdə bir sətirdə əvəz olunur, provider-lər kompilyasiya səviyyəsində yoxlanılır,autoDisposeyaddaşı özü təmizləyir. Qiyməti: yeni mental model, codegen build vaxtı. - Niyə BLoC? — Rəsmi sənədin iki bəndi: traceability (
onTransitionstate → event → state) və advanced event transformations (debounce, droppable). Audit tələb olunan axınlarda və böyük komandada disiplin üstünlüyü. Qiyməti: boilerplate. - Niyə Provider? — Ən aşağı öyrənmə əyrisi, rəsmi arxitektura case study-sinin DI seçimi, Flutter sənədində rəsmi nümunə. Kiçik və orta tətbiqdə kifayətdir. Qiyməti: async state əl ilə, runtime xətaları.
- Niyə qarışıq? — Ödəniş axını BLoC (audit), qalan hissə Riverpod (async). Şərt: sərhəd sənədləşdirilir və bir ekranda qarışdırılmır.
📚 Mənbələr və sənədlər
- Flutter: state management seçimlərirəsmidocs.flutter.dev
"Vahid tövsiyə yoxdur" mövqeyinin mənbəyi — müsahibədə istinad üçün.
- Niyə Bloc?rəsmibloclibrary.dev
- Riverpod: motivasiyarəsmiriverpod.dev
- Flutter arxitektura bələdçisirəsmidocs.flutter.dev