NoSuchMethodError:方法“ map”在null上被调用

时间:2019-09-25 11:22:43

标签: json flutter null

[ERROR:flutter / lib / ui / ui_dart_state.cc(148)]未处理的异常:NoSuchMethodError:方法“ map”在null上被调用。 E / flutter(19718):接收者:null E / flutter(19718):尝试调用:map(关闭((动态)=> SeriesNo)

我尝试了json_annotation和json可序列化但不起作用。根据我的模型,one.json可以,但是two.json是reques发生标题错误。如何解决。我知道系列不是错误,但我不知道解决方法。

这是一个.json

 {
   "bookDetail": {
    "title": "aaa",
    "author": "aaa",
    "image": "https://",
    "text": "aaa",
    "series_no": [
        {
            "id": 2
        }
    ],
    "created_at": "2019-08-27 15:19:10"
  }
}

这是two.json

{
"bookDetail": {
    "title": "Test",
    "author": "TEst",
    "image": "https:/riv19q9x.png",
    "text": "Test",
    "series_no": null,
    "created_at": "2019-08-27 15:13:56"
  }
}

这是使用块状颤振的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,
  };
}

3 个答案:

答案 0 :(得分:0)

尝试动态放置seriesNo并放置其余字段

class BookDetailModel {
    BookDetail bookDetail;

    BookDetailModel({
        this.bookDetail,
    });

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

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

class BookDetail {
    String title;
    String author;
    String image;
    String text;
    dynamic seriesNo;
    DateTime createdAt;

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

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

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

答案 1 :(得分:0)

尝试在之前验证是否不为空:

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

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

答案 2 :(得分:0)

试试这个

seriesNo: json["series_no"] != null ? new List<SeriesNo>.from( json["series_no"].map((x) => SeriesNo.fromJson(x))) : List<SeriesNo>().
相关问题