Yanaşmaların mənzərəsi və seçim kriteriyaları
Flutter komandası bir state management həlli tövsiyə etmir. Rəsmi sənəd yazır ki, ən yaxşı seçim tətbiqin mürəkkəbliyindən, komandanın seçimlərindən və həll etməli olduğunuz konkret problemlərdən asılıdır; həmçinin açıq şəkildə qeyd edir ki, mövzu mürəkkəbdir və təsvir edilən yanaşma sizin halınıza uyğun gəlməyə bilər.
Bu, müsahibə üçün vacib nüansdır: "düzgün" cavab library adı deyil, seçim arqumentasiyasıdır.
| Kriteriya | Provider | Riverpod | BLoC / Cubit |
|---|---|---|---|
| Provider-in yeri | Widget ağacında (`MultiProvider`) | Ağacdan kənarda, qlobal `final` dəyişən | Ağacda (`BlocProvider`), daxildə package:provider |
| Oxunuş | Tipə görə: `context.watch<T>()` | Obyektə görə: `ref.watch(myProvider)` | Tipə görə: `context.read<T>()`, `BlocBuilder<B, S>` |
| Səhv provider oxumaq | Runtime xətası (ağacda tapılmır) | Kompilyasiya vaxtı görünür — provider konkret obyektdir | Runtime xətası (`BlocProvider` tapılmır) |
| Async state | Əl ilə: `FutureProvider`, ya da model içində flag-lar | Daxili `AsyncValue`: loading/error/data hazır | State modelində əl ilə: status enum ya sealed class |
| İzlənilə bilənlik (traceability) | Zəif — kim `notifyListeners` çağırdı, görünmür | Observer-lər ilə mümkün | Güclü — hər state dəyişikliyinin arxasında event var |
| Boilerplate | Ən az | Orta (codegen ilə azalır) | Ən çox (Cubit ilə azalır) |
Rəsmi bloc sənədi Bloc-un Cubit üzərindəki iki üstünlüyünü konkret sadalayır: traceability (state dəyişikliyinin ardıcıllığını və onu nəyin tetiklədiyini bilmək) və advanced event transformations (EventTransformer ilə debounce, throttle kimi reaktiv operatorlar). Müsahibədə "niyə BLoC?" sualına ən dəqiq cavab elə budur — "daha yaxşıdır" deyil, bu iki konkret qabiliyyət.
Praktik seçim ardıcıllığı — müsahibədə səsli düşünmək üçün:
- Komanda və codebase ölçüsü. Bir developer, 5 ekran → Provider və ya sadə Riverpod. 10+ developer, uzunömürlü məhsul → strukturu məcbur edən həll (BLoC, ya da codegen-li Riverpod + lint).
- Async-ın payı. Ekranların çoxu şəbəkədən yüklənirsə,
AsyncValuevə avtomatik cache/retry böyük qazancdır. - Audit tələbi. Fintech, sığorta, ödəniş axını — event-lərin jurnalı və
BlocObserverilə izləmə real dəyər verir. - Mövcud kod. Hazır Provider codebase-inə BLoC gətirmək iki paradiqma deməkdir; migrasiya planı olmadan bu texniki borcdur.
- İşə qəbul reallığı. Regionda ən çox axtarılan bacarıqlar Provider, Riverpod və BLoC-dur — nadir library seçimi komanda dəyişəndə xərcə çevrilir.
📚 Mənbələr və sənədlər
- Flutter: state management seçimlərirəsmidocs.flutter.dev
Rəsmi mövqe: vahid tövsiyə yoxdur, seçim kontekstdən asılıdır.
- Niyə Bloc?rəsmibloclibrary.dev
BLoC-un öz arqumentasiyası — müsahibədə əks arqument qurmaq üçün də faydalıdır.
- Riverpod: motivasiyarəsmiriverpod.dev
Riverpod-un Provider-in hansı məhdudiyyətlərini həll etdiyini müəllifin dilində.
- Flutter arxitektura bələdçisirəsmidocs.flutter.dev