繁体   English   中英

Flutter:无法使用 dio 获取阵列 json 到 object 列表

[英]Flutter : Can't get array json using dio to list of object

我尝试加载数组 json(无键数组)并获取 object 列表,这是我的示例代码:

我的 APICliet:

Future<List<OnBoardingModel>> fetchOnboarding() async {
    try {
      Response response = await dio.get("api/OnboardingItem");
      return OnBoardingModel.fromJson(response.data) as List;
    } catch (error, stacktrace) {
      throw Exception("Exception occured: $error stackTrace: $stacktrace");
    }
  }

我的 Object (使用quicktype生成):

List<OnBoardingModel> onBoardingModelFromJson(String str) => List<OnBoardingModel>.from(json.decode(str).map((x) => OnBoardingModel.fromJson(x)));

String onBoardingModelToJson(List<OnBoardingModel> data) => json.encode(List<dynamic>.from(data.map((x) => x.toJson())));

class OnBoardingModel {
  OnBoardingModel({
    this.id,
    this.judul,
    this.deskripsi,
    this.urlGambar,
  });

  int id;
  String judul;
  String deskripsi;
  String urlGambar;

  factory OnBoardingModel.fromJson(Map<String, dynamic> json) => OnBoardingModel(
    id: json["id"],
    judul: json["judul"],
    deskripsi: json["deskripsi"],
    urlGambar: json["urlGambar"],
  );

  Map<String, dynamic> toJson() => {
    "id": id,
    "judul": judul,
    "deskripsi": deskripsi,
    "urlGambar": urlGambar,
  };
}

最后我得到一个错误显示: Exception: Exception occured: type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>' stackTrace: #0 ,请参阅此行return OnBoardingModel.fromJson(response.data) as List;

你能帮我解决这个案子吗? 我谢谢你

更新

我的 json 格式:

[
  {
    "id": 0,
    "judul": "string",
    "deskripsi": "string",
    "urlGambar": "string"
  }
]

最后我得到了答案,只需使用此替换返回:

return (response.data as List)
          .map((x) => OnBoardingModel.fromJson(x))
          .toList();

完整代码:

Future<List<OnBoardingModel>> fetchOnboarding() async {
    try {
      Response response = await dio.get("api/OnboardingItem");
      // if there is a key before array, use this : return (response.data['data'] as List).map((child)=> Children.fromJson(child)).toList();
      return (response.data as List)
          .map((x) => OnBoardingModel.fromJson(x))
          .toList();
    } catch (error, stacktrace) {
      throw Exception("Exception occured: $error stackTrace: $stacktrace");
    }
  }

希望这个答案对 flutter 的其他新客人有所帮助。

导入“飞镖:转换”;

List<Welcome> welcomeFromJson(String str) => List<Welcome>.from(json.decode(str).map((x) => Welcome.fromJson(x)));

String welcomeToJson(List<Welcome> data) => json.encode(List<dynamic>.from(data.map((x) => x.toJson())));

class Welcome {
    Welcome({
        this.id,
        this.judul,
        this.deskripsi,
        this.urlGambar,
    });

    int id;
    String judul;
    String deskripsi;
    String urlGambar;

    factory Welcome.fromJson(Map<String, dynamic> json) => Welcome(
        id: json["id"],
        judul: json["judul"],
        deskripsi: json["deskripsi"],
        urlGambar: json["urlGambar"],
    );

    Map<String, dynamic> toJson() => {
        "id": id,
        "judul": judul,
        "deskripsi": deskripsi,
        "urlGambar": urlGambar,
    };
}

最后的欢迎 = welcomeFromJson(jsonString);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM