NoSuchMethodError:方法“map”被调用为空

H Z*_*Zan 1 null json flutter

[错误:flutter/lib/ui/ui_dart_state.cc(148)] 未处理的异常:NoSuchMethodError:在 null 上调用方法“map”。E/flutter(19718):接收器:null E/flutter(19718):尝试调用:map(闭包:(dynamic)=> SeriesNo)

我尝试了 json_annotation 和 json Serieizable 但不起作用。根据我的模型 one.json 没问题。但是 Two.json 要求错误发生为标题。如何解决。我知道系列 no 是错误,但我不知道如何解决。

这是 one.json

 {
   "bookDetail": {
    "title": "aaa",
    "author": "aaa",
    "image": "https://",
    "text": "aaa",
    "series_no": [
        {
            "id": 2
        }
    ],
    "created_at": "2019-08-27 15:19:10"
  }
}
Run Code Online (Sandbox Code Playgroud)

这是两个.json

{
"bookDetail": {
    "title": "Test",
    "author": "TEst",
    "image": "https:/riv19q9x.png",
    "text": "Test",
    "series_no": null,
    "created_at": "2019-08-27 15:13:56"
  }
}
Run Code Online (Sandbox Code Playgroud)

这是使用块颤动的detail.model

class BookDetailModel {
    BookDetail bookDetail;

    BookDetailModel({
    this.bookDetail,
 });

factory BookDetailModel.fromJson(Map<String, dynamic> json) =>
  new BookDetailModel(
    bookDetail: BookDetail.fromJson(json["bookDetail"]),
   );

Map<String, dynamic> toJson() => {
    "bookDetail": bookDetail.toJson(),
  };
}

  @JsonSerializable(nullable: true)
   class BookDetail {
   String title;
   String author;
   String image;
   String text;

   List<SeriesNo> seriesNo;
   DateTime createdAt;

   BookDetail({
    this.title,
    this.author,
   this.image,
   this.text,
   this.seriesNo,
  this.createdAt,
 });

factory BookDetail.fromJson(Map<String, dynamic> json) => new BookDetail(
    title: json["title"],
    author: json["author"],
    image: json["image"],
    text: json["text"],
    seriesNo: new List<SeriesNo>.from(
        json["series_no"].map((x) => SeriesNo.fromJson(x))),
    createdAt: DateTime.parse(json["created_at"]),
  );

  Map<String, dynamic> toJson() => {
    "title": title,
    "author": author,
    "image": image,
    "text": text,
    "series_no": new List<dynamic>.from(seriesNo.map((x) => x.toJson())),
    "created_at": createdAt.toIso8601String(),
  };
 }

  @JsonSerializable(nullable: true)
  class SeriesNo {
   int id;

   SeriesNo({
     this.id,
  });

  factory SeriesNo.fromJson(Map<String, dynamic> json) => new SeriesNo(
    id: json["id"],
  );

  Map<String, dynamic> toJson() => {
    "id": id,
  };
}
Run Code Online (Sandbox Code Playgroud)

H Z*_*Zan 5

尝试先验证是否不为空:

seriesNo: json["series_no"] != null ? new List<SeriesNo>.from( json["series_no"].map((x) => SeriesNo.fromJson(x))) : List<SeriesNo>().
Run Code Online (Sandbox Code Playgroud)

这是我问题的答案。Crd @Stel