首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在类对象中转换API的响应

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

Stack Overflow用户
提问于 2020-11-27 01:29:02
回答 1查看 48关注 0票数 0

我有一个类SuperHero和一个API消费,它返回一个带有我想要创建的新SuperHero的值的响应,但我对如何做到这一点有点困惑。

这是我的班级:

代码语言:javascript
复制
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,
    };
}

SuperHeroController

代码语言:javascript
复制
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);
  }
}

我的小部件

代码语言:javascript
复制
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?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-27 03:23:52

类似于:

代码语言:javascript
复制
@override
void initState() {
  super.initState();
  _heroController = SuperHeroController(hero: Provider.of<Auth>(context, listen: false).id);
  _loadHero();
}

_loadHero() async {
    hero = await _heroController.loadData();
}

控制器..。

代码语言:javascript
复制
class SuperHeroController {
  final String hero;

  SuperHeroController({this.hero});

  Future<SuperHero> loadData() async {
    ...
    var data = json.decode(response.body);
    return SuperHero.fromJson(data);
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65026771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档