Идентификатор в пути в Dart
Шаблон "/posts/{id}" означает, что число
в конце адреса выбирает запись. Строку URI собирают
заранее, подставляя нужный идентификатор в литерал
или через интерполяцию.
Требуется пост с номером 3. После
чтения тела достаточно модели с id и
title:
import 'package:http/http.dart' as http;
import 'dart:convert';
class ApiPost {
ApiPost(this.id, this.title);
final int id;
final String title;
factory ApiPost.fromJson(Map<String, Object?> json) {
return ApiPost(
json['id'] as int,
json['title'] as String,
);
}
}
void main() async {
var postId = 3;
var address =
'https://jsonplaceholder.typicode.com/posts/$postId';
var response = await http.get(Uri.parse(address));
var raw = jsonDecode(response.body);
if (raw is Map<String, Object?>) {
var post = ApiPost.fromJson(raw);
print(post.id);
print(post.title);
}
}
Тот же прием работает для пользователей: меняется
только базовый сегмент и тип модели. Число
2 в пути дает вторую учебную запись:
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 userId = 2;
var address =
'https://jsonplaceholder.typicode.com/users/$userId';
var response = await http.get(Uri.parse(address));
var raw = jsonDecode(response.body);
if (raw is Map<String, Object?>) {
var user = ApiUser.fromJson(raw);
print(user.name);
}
}