Xəta və yüklənmə vəziyyətlərinin idarəsi
Hər async ekranın ən azı dörd vəziyyəti var və üçüncü ilə dördüncü ən çox unudulan hissədir:
- Loading — data gəlir
- Data — nəticə var
- Empty — sorğu uğurlu, amma nəticə boşdur (bu, xəta DEYİL)
- Error — sorğu uğursuz oldu
Boş siyahını "heç nə göstərməmək" kimi buraxmaq klassik UX səhvidir: istifadəçi tətbiqin sındığını düşünür. Boş vəziyyət izahlı olmalıdır — nə üçün boşdur və nə etmək olar.
Xətaları UI-a çatdırmağın iki yolu var:
- Exception atmaq — Dart-ın təbii mexanizmi;
try/catchilə tutulur. Sadədir, amma imza xətanın mümkünlüyünü göstərmir - Result/Either tipi qaytarmaq —
sealed class Result { Success | Failure }; xətanın mümkünlüyü tipdə görünür vəswitchonu idarə etməyə məcbur edir
Hər iki yanaşma legitimdir. Vacib olan ardıcıllıqdır: bir layihədə ikisini qarışdırmaq ən pis variantdır.
Eyni dərəcədə vacib qayda: texniki xəta mesajını istifadəçiyə göstərmə. SocketException: Failed host lookup istifadəçi üçün heç nə demir — data qatında xətanı domen tipinə çevir, UI isə ona uyğun anlaşılan mesaj göstərsin.
Interview ipucu. "Xətaları necə idarə edirsən?" sualında try/catch demək kifayət deyil. Güclü cavabda üç element var: (1) xəta harada tutulur — data qatında, domen tipinə çevrilərək; (2) istifadəçi nə görür — anlaşılan mesaj + təkrar cəhd düyməsi; (3) developer nə görür — loglama və ya crash reporting. Boş vəziyyəti xətadan ayırmağı da qeyd et — bu, çox az namizədin dediyi detaldır.
📚 Mənbələr və sənədlər
- Şəbəkə və datarəsmidocs.flutter.dev
- Arxitektura bələdçisirəsmidocs.flutter.dev
- FutureBuilder classrəsmiapi.flutter.dev
`snapshot.hasError` və `connectionState` ilə hər vəziyyətin idarəsi sənəddə göstərilib.