Один ресурс API в Dart
Многие API адресуют объект по идентификатору в конце
пути. Ответ - один JSON-объект, его разбирают так же,
как локальную строку, только источником служит
response.body.
Чтение "/users/1" на typicode возвращает
пользователя с полем name. Модель снова
может быть короткой - лишние ключи в ответе не
мешают fromJson:
import 'package:http/http.dart' as http;
import 'dart:convert';
class ApiUser {
ApiUser(this.id, this.name);
final int id;
final String name;
factory ApiUser.fromJson(Map<String, Object?> json) {
return ApiUser(
json['id'] as int,
json['name'] as String,
);
}
}
void main() async {
var response = await http.get(
Uri.parse(
'https://jsonplaceholder.typicode.com/users/1',
),
);
var raw = jsonDecode(response.body);
if (raw is Map<String, Object?>) {
var user = ApiUser.fromJson(raw);
print(user.name);
}
}
Тот же путь с другим числом в конце дает другую
запись. Достаточно поменять сегмент адреса и снова
прочитать name из разобранного объекта:
import 'package:http/http.dart' as http;
import 'dart:convert';
class ApiUser {
ApiUser(this.id, this.name);
final int id;
final String name;
factory ApiUser.fromJson(Map<String, Object?> json) {
return ApiUser(
json['id'] as int,
json['name'] as String,
);
}
}
void main() async {
var response = await http.get(
Uri.parse(
'https://jsonplaceholder.typicode.com/users/2',
),
);
var raw = jsonDecode(response.body);
if (raw is Map<String, Object?>) {
var user = ApiUser.fromJson(raw);
print(user.id);
print(user.name);
}
}