Sparround

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/toJson generasiya 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"). Kor as int cast 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