Правильность описания модели данныx

Подскажите, правильно ли я описываю модель данных в ответе с апи?

{
  "data": [
    {
      "id": 0,
      "name": "ilya",
      "age": 12
    }
  ]
}

Мой API может вернуть все поля пустыми. Вопрос, могу ли я в модели класса использовать такие конструкции, для проверки на null и в случае null использовать путсые строки, массивы и так далее, или же это неверно и нужно иначе проверять такие вещи?

import 'package:meta/meta.dart';
import 'dart:convert';

SalonsInfoModel salonsInfoModelFromJson(String str) => SalonsInfoModel.fromJson(json.decode(str));

String salonsInfoModelToJson(SalonsInfoModel data) => json.encode(data.toJson());

class SalonsInfoModel {
  SalonsInfoModel({
    required this.data,
  });

  final List<Datum> data;

  factory SalonsInfoModel.fromJson(Map<String, dynamic> json) => SalonsInfoModel(
    data: json["data"] == null ? [] : List<Datum>.from(json["data"].map((x) => Datum.fromJson(x))),
  );

  Map<String, dynamic> toJson() => {
    "data": data == null ? [] : List<dynamic>.from(data.map((x) => x.toJson())),
  };
}

class Datum {
  Datum({
    required this.id,
    required this.name,
    required this.age,
  });

  final int id;
  final String name;
  final int age;

  factory Datum.fromJson(Map<String, dynamic> json) => Datum(
    id: json["id"] == null ? '' : json["id"],
    name: json["name"] == null ? '' : json["name"],
    age: json["age"] == null ? '' : json["age"],
  );

  Map<String, dynamic> toJson() => {
    "id": id == null ? '' : id,
    "name": name == null ? '' : name,
    "age": age == null ? '' : age,
  };
}

Ответы (1 шт):

Автор решения: ddo5
  1. Если API может возвращать пустые значения (если я правильно понял, вы имеете ввиду null), то лучше сделать поля с nullable типом, дописав ?:
class Datum {
  Datum({
    this.id,
    this.name,
    this.age,
  });

  final int? id;
  final String? name;
  final int? age;

  factory Datum.fromJson(Map<String, dynamic> json) => Datum(
    id: json["id"] as int?,
    name: json["name"] as String?,
    age: json["age"] as int?,
  );

  Map<String, dynamic> toJson() => <String, dynamic>{
    "id": id,
    "name": name,
    "age": age,
  };
}
  1. Если же вы хотите иметь non-nullable поля со значениями по умолчанию, нужно поправить Datum.fromJson и Datum.toJson. Например, строка id: json["id"] == null ? '' : json["id"] пытается задать целочисленной переменной строковое значение. Исправленная версия:
class Datum {
  Datum({
    required this.id,
    required this.name,
    required this.age,
  });

  final int id;
  final String name;
  final int age;

  factory Datum.fromJson(Map<String, dynamic> json) => Datum(
    id: json["id"] == null ? 0 : json["id"] as int,
    name: json["name"] == null ? '' : json["name"] as String,
    age: json["age"] == null ? 0 : json["age"] as int,
  );

  Map<String, dynamic> toJson() => <String, dynamic>{
    "id": id,
    "name": name,
    "age": age,
  };
}
→ Ссылка