Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何转换类对象中API的响应_Flutter_Dart - Fatal编程技术网

Flutter 如何转换类对象中API的响应

Flutter 如何转换类对象中API的响应,flutter,dart,Flutter,Dart,我有一个类SuperHero,还有一个API消费,它返回一个响应,其中的值是我想要创建新的SuperHero的值,但是我有点不知道怎么做 这是我的班级: 导入'dart:convert'; 超级英雄超级英雄fromJson(String str)=>SuperHero.fromJson(json.decode(str)); 字符串superHeroToJson(SuperHero数据)=>json.encode(data.toJson()); 职业超级英雄{ 超级英雄({ 这个名字, 这是主电源

我有一个类
SuperHero
,还有一个API消费,它返回一个响应,其中的值是我想要创建新的SuperHero的值,但是我有点不知道怎么做

这是我的班级:

导入'dart:convert';
超级英雄超级英雄fromJson(String str)=>SuperHero.fromJson(json.decode(str));
字符串superHeroToJson(SuperHero数据)=>json.encode(data.toJson());
职业超级英雄{
超级英雄({
这个名字,
这是主电源,
这是worstEnemy,
});
字符串名;
串主电源;
线绳缠绕;
工厂超级英雄.fromJson(映射json)=>超级英雄(
名称:json[“名称”],
mainPower:json[“mainPower”],
worstEnemy:json[“worstEnemy”],
);
映射到JSON()=>{
“姓名”:姓名,
“mainPower”:mainPower,
“worstEnemy”:worstEnemy,
};
}
超级英雄控制器

类超级英雄控制器{
最后的弦乐英雄;
超级英雄控制器({this.hero}){
加载数据(hero);
}
未来加载数据(字符串usuario)异步{
最终字符串url=**;
最终映射查询参数={
“英雄”:英雄,
};
var uri=uri.parse(url.resolveUri(uri(queryParameters:queryParams));
最终响应=等待http.get(
乌里,
标题:{“内容类型”:“应用程序/json”},
);
var data=json.decode(response.body);
打印(数据);
}
}
我的小部件

超级英雄; 超级英雄控制器(SuperHeroController);; 英雄(英雄){ 英雄=英雄; } @凌驾 void initState(){ super.initState(); _heroController=SuperHeroController(英雄:Provider.of(context,listen:false).id);//获取用户的英雄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();
}
@覆盖
void initState(){
super.initState();
_heroController=SuperHeroController(英雄:Provider.of(context,listen:false).id);
_loadHero();
}
_loadHero()异步{
hero=wait_heroController.loadData();
}
控制器

class SuperHeroController {
  final String hero;

  SuperHeroController({this.hero});

  Future<SuperHero> loadData() async {
    ...
    var data = json.decode(response.body);
    return SuperHero.fromJson(data);
  }
}
类超级英雄控制器{
最后的弦乐英雄;
超级英雄控制器({this.hero});
Future loadData()异步{
...
var data=json.decode(response.body);
返回SuperHero.fromJson(数据);
}
}

如果我在loadHero中调用hero.name,它会显示名称,但如果我尝试用其他方法写入此名称以在屏幕上显示,它会抛出:
getter名称在null上调用
我打开屏幕时,它会抛出null,但是如果我在屏幕上热加载时出现错误,它会显示名称您是否尝试过setState()请注意,
loadHero()
是一个
async
函数。当您尝试更新其名称时,很可能未加载英雄。确保只有在加载英雄后才能访问英雄。