如何在Flutter中提出API请求

时间:2019-09-12 12:24:36

标签: json api flutter

我是Flutter的新手,所以我不确定应该如何进行API调用,该调用来自我使用Retrofit的Java。

JSON响应:

let query = NSPredicate(format: "(%K = %@) AND (%K = %@) AND (%K in (%@))",
                        "isSelected","true",
                        "identifier","S300",
                        "idLang" , idLang)

模型类:

{
    "total": 13,
    "rows": [
        {
            "id": 1,
            "name": "Name"
        }
    ]
}

主班

class Category {
  int total;
  List<Rows> rows;
  Category({this.total, this.rows});

  Category.fromJson(Map<String, dynamic> json) {
    total = json['total'];
    if (json['rows'] != null) {
      rows = new List<Rows>();
      json['rows'].forEach((v) {
        rows.add(new Rows.fromJson(v));
      });
    }
  }
}
class Rows {
  String name;
  Rows({this.name});

  Rows.fromJson(Map<String, dynamic> json) {
    name = json['name'];
  }
}

我不确定如何尝试使用Rows.fromJson()获取对象,但是我仅获得“行实例”,并且通过调用名称得到null。

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

这种方法是正确的,但对于列表,应使用list.map对列表进行反序列化。

尝试一下,我没有测试过,我只是看你的例子写出来的

var response = await http.get(
    Uri.encodeFull("http://192.168.0.10/api/v1/categories"),
    headers: {
      "Authorization": "API",
      "Accept": "application/json"
    }
);
List<Rows> rows = [];

Map map = json.decode(response.body);
List l = map["rows"];
rows = l.map((map) => Rows.fromJson(map)).toList();