Quicktype es una herramienta online fácil y simple de usar para convertir objetos JSON a Clases en Dart(Flutter) u otros lenguajes. No solo convierte a clases, sino que genera funciones como: toJson, toMap, copyWith y más.
Ejemplo de objeto JSON:
{
"status": 200,
"description": "Success",
"data": {
"username": "admin",
"token": "X1.CONTENT.X3",
"tokenType": "Bearer",
"tokenExpiration": "2022-12-24 06:26:52",
"roles": [
{
"id": 2,
"code": "COMMON_USER",
"description": "Usuario"
}
]
}
}
Ejemplo de código en Dart:
import 'package:meta/meta.dart';
import 'dart:convert';
class SuccessDto {
SuccessDto({
required this.status,
required this.description,
required this.data,
});
final int status;
final String description;
final Data data;
factory SuccessDto.fromJson(String str) => SuccessDto.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory SuccessDto.fromMap(Map<String, dynamic> json) => SuccessDto(
status: json["status"],
description: json["description"],
data: Data.fromMap(json["data"]),
);
Map<String, dynamic> toMap() => {
"status": status,
"description": description,
"data": data.toMap(),
};
}
class Data {
Data({
required this.username,
required this.token,
required this.tokenType,
required this.tokenExpiration,
required this.roles,
});
final String username;
final String token;
final String tokenType;
final DateTime tokenExpiration;
final List<Role> roles;
factory Data.fromJson(String str) => Data.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory Data.fromMap(Map<String, dynamic> json) => Data(
username: json["username"],
token: json["token"],
tokenType: json["tokenType"],
tokenExpiration: DateTime.parse(json["tokenExpiration"]),
roles: List<Role>.from(json["roles"].map((x) => Role.fromMap(x))),
);
Map<String, dynamic> toMap() => {
"username": username,
"token": token,
"tokenType": tokenType,
"tokenExpiration": tokenExpiration.toIso8601String(),
"roles": List<dynamic>.from(roles.map((x) => x.toMap())),
};
}
class Role {
Role({
required this.id,
required this.code,
required this.description,
});
final int id;
final String code;
final String description;
factory Role.fromJson(String str) => Role.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory Role.fromMap(Map<String, dynamic> json) => Role(
id: json["id"],
code: json["code"],
description: json["description"],
);
Map<String, dynamic> toMap() => {
"id": id,
"code": code,
"description": description,
};
}
*Eliminar el símbolo de arroba, versiones actuales de dart y flutter ya no lo soportan.