flutter - 如何在类对象中转换 API 的响应
问题描述
我有一个类SuperHero
和一个 API 消耗,它返回一个包含我想要创建新 SuperHero 的值的响应,但我对如何做到这一点有点困惑。
这是我的课:
import 'dart:convert';
SuperHero superHeroFromJson(String str) => SuperHero.fromJson(json.decode(str));
String superHeroToJson(SuperHero data) => json.encode(data.toJson());
class SuperHero {
SuperHero({
this.name,
this.mainPower,
this.worstEnemy,
});
String name;
String mainPower;
String worstEnemy;
factory SuperHero.fromJson(Map<String, dynamic> json) => SuperHero(
name: json["name"],
mainPower: json["mainPower"],
worstEnemy: json["worstEnemy"],
);
Map<String, dynamic> toJson() => {
"name": name,
"mainPower": mainPower,
"worstEnemy": worstEnemy,
};
}
超级英雄控制器
class SuperHeroController {
final String hero;
SuperHeroController({this.hero}){
loadData(hero);
}
Future<Map<String, dynamic>> loadData(String usuario) async {
final String url = ****;
final Map<String, dynamic> queryParams = {
'hero': hero,
};
var uri = Uri.parse(url).resolveUri(Uri(queryParameters: queryParams));
final response = await http.get(
uri,
headers: {"Content-Type": "application/json"},
);
var data = json.decode(response.body);
print(data);
}
}
我的小部件
SuperHero hero;
SuperHeroController _superHeroController;
HeroWidget(hero){
hero = hero;
}
@override
void initState() {
super.initState();
_heroController = SuperHeroController (hero: Provider.of<Auth>(context, listen: false).id); // getting the user's hero id
}
运行此代码,调用 initState,它在控制台中显示我必须在 SuperHero 类中构建的结构,但我不知道该怎么做。我在哪里运行方法 SuperHeroFromJson 返回并获取带有响应的对象 SuperHero?
解决方案
就像是:
@override
void initState() {
super.initState();
_heroController = SuperHeroController(hero: Provider.of<Auth>(context, listen: false).id);
_loadHero();
}
_loadHero() async {
hero = await _heroController.loadData();
}
和控制器...
class SuperHeroController {
final String hero;
SuperHeroController({this.hero});
Future<SuperHero> loadData() async {
...
var data = json.decode(response.body);
return SuperHero.fromJson(data);
}
}