Правильность описания модели данны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
→ Ссылка
- Если 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,
};
}
- Если же вы хотите иметь 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,
};
}