如何将response.body映射到多个列表?

时间:2019-10-01 15:42:41

标签: flutter dart

所以基本上我有2个List<Object>

List<Feed> feeListList<Comment> commentList

然后,当我启动应用程序时,我会自动调用该方法以从我的API中获取数据,以填充主要的List,即List<Feed> feeList

我的目标是填充这2个列表,这样我就不必调用另一个API即可填充另一个列表,即List<Comment> commentList

因此,我进行了实验并添加了commentList = data['comments'] .map<Comment>((json) => Comment.fromJson(json)) .toList();

调试时,我做了print(res.body);,然后对某个索引的响应冻结

真的有可能吗?

这是我的代码:

Future<List<Feed>> getFeedAll() async {
    var res = await http.get(
        Uri.encodeFull(APIServices.httpDomain + APIServices.postGetAll),
        headers: {"Authorization": "Bearer " + Constants.token});

    if (res.statusCode == 200) {
      var data = json.decode(res.body);
      print("$data");
      feedList = data.map<Feed>((json) => Feed.fromJson(json)).toList();
      commentList = data['comments']
          .map<Comment>((json) => Comment.fromJson(json))
          .toList();
    }

    print(res.body);

    return feedList;
  }

1 个答案:

答案 0 :(得分:0)

您很可能在模型类中缺少一些null验证。在不知道您的模型的情况下,我假设您有可能为空的列表,因此响应中缺少该列表:

在模型中寻找cast并处理null值:

例如:

mystringlist= json['mystringlist'].cast<String>();

更改为:

mystringlist = json['mystringlist'] != null
        ? json['mystringlist'].cast<String>()
        : List<String>();