【发布时间】:2019-12-03 20:52:41
【问题描述】:
我在 JSON 中使用 GET 到 https://rickandmortyapi.com/api/character/。该 JSON 包含episode 的链接数组,例如https://rickandmortyapi.com/api/episode/4。如何从 episode 链接获取像 S01E04 这样的剧集名称?
我现在的代码是:
字符.类
import 'dart:convert';
import 'package:rick_and_morty_characters/services/webservice.dart';
import 'package:rick_and_morty_characters/utils/constants.dart';
class Character {
final int id;
final String name;
final String status;
final String image;
final Episode episode;
Character({this.id, this.name, this.status, this.image, this.episode});
factory Character.fromJson(Map<String,dynamic> json) {
return Character(
id: json['id'],
name: json['name'],
status: json['status'],
image: json['image'] ?? Constants.DEFAULT_AVATAR,
episode: Episode.fromJson(json['episode'])
);
}
static Resource<List<Character>> get all {
return Resource(
url: Constants.R_A_M_CHARACTERS,
parse: (response) {
final result = json.decode(response.body);
Iterable list = result['results'];
return list.map((model) => Character.fromJson(model)).toList();
}
);
}
}
class Episode {
final String episodeLink;
Episode({this.episodeLink});
factory Episode.fromJson(Map<String,dynamic> json) {
return Episode(
episodeLink: json['episode']
);
}
}
constants.dart
class Constants {
static final String R_A_M_CHARACTERS = 'https://rickandmortyapi.com/api/character/';
static final String DEFAULT_AVATAR = 'https://rickandmortyapi.com/api/character/avatar/1.jpeg';
}
webservice.dart
import 'package:http/http.dart' as http;
import 'package:http/http.dart';
class Resource<T> {
final String url;
T Function(Response response) parse;
Resource({this.url,this.parse});
}
class Webservice {
Future<T> load<T>(Resource<T> resource) async {
final response = await http.get(resource.url);
if(response.statusCode == 200) {
return resource.parse(response);
} else {
throw Exception('Failed to load data!');
}
}
}
【问题讨论】: