JSON serialization
Dart-da JSON Map<String, dynamic> kimi gəlir və bu, tip təhlükəsizliyi olmayan formadır: json['naem'] yazsan, kompilyator susur, xəta yalnız runtime-da çıxır.
Həll — datanı sərhəddə domen modelinə çevirmək. İki yol var:
- Əl ilə —
factory Order.fromJson(Map<String, dynamic> json). Asılılıq yoxdur, amma model böyüdükcə yorucu və səhvə açıqdır - Kod generasiyası —
json_serializable+build_runner: annotasiya yazırsan,fromJson/toJsongenerasiya olunur
Hər iki halda çevirmə yalnız data qatında baş verməlidir; widget heç vaxt JSON görməməlidir.
Real API-lərlə işləyəndə iki hal həmişə problem yaradır:
- `null` və çatışmayan sahələr — API sənəddə "həmişə var" desə də, praktikada gəlməyə bilər. Model tərifində nullable-lığı dürüst əks etdir və default dəyər ver
- Tip uyğunsuzluğu — backend bəzən rəqəmi string kimi göndərir (
"42"). Koras intcast runtime-da partlayır; təhlükəsiz parse funksiyası yazmaq lazımdır
Bu iki hal API testlərinin ən çox tapdığı problemlərdəndir və Flutter tərəfdə defensiv parse ilə həll olunur.
Interview ipucu. "Əl ilə, yoxsa kod generasiyası?" sualına meyarla cavab ver: 2-3 kiçik model üçün əl ilə yazmaq daha sadədir və build_runner qurmağa dəyməz; 20+ model və ya tez-tez dəyişən API varsa, generasiya səhv riskini və yorucu işi aradan qaldırır. Bir nüans əlavə et: generasiya olunan fayllar (.g.dart) versiya nəzarətinə salınmalı, yoxsa CI-da build_runner işlətmək lazımdır — komandada bu barədə razılıq olmalıdır.
📚 Mənbələr və sənədlər
- JSON və serializationrəsmidocs.flutter.dev
Əl ilə parse və kod generasiyası yanaşmaları rəsmi sənəddə müqayisə olunub.
- json_serializable paketirəsmipub.dev
- Şəbəkə ilə işrəsmidocs.flutter.dev