Я получаю ошибку, когда делаю tojson во флаттере

#flutter

Вопрос:

Я попробовал tojson во флаттере, но я получаю следующую ошибку:

    [VERBOSE-2:ui_dart_state.cc(199)] Unhandled Exception: type 'List<Tag>' is not a subtype of type 'String' in type cast
 

это мой код

     import 'package:flutter_traveling/model/Tag.dart';

  class Diary {
    String? title;
    String? location;
    String? address;
    List<Tag>? tagList;
    List<Pages>? pages;
  String? date;

  Diary({
    this.title,
    this.location,
    this.tagList,
    this.pages,
    this.date,
    this.address,
  });

  Diary.fromJson(Map<String, dynamic> json) {
    title = json['title'] ?? "";
    location = json['location'] ?? "";
    address = json["address"] ?? "";
    tagList = json['tag_list'] ?? <Tag>[];

    pages = json['pages'] ?? <Pages>[];
    date = json['date'] == null ? '' : json['date'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();

    data['title'] = this.title;
    data['location'] = this.location;
    data['tag_list'] = this.tagList;
    data['pages'] = this.pages;
    data['date'] = this.date;
    data['address'] = this.address;

    return data;
  }
}

class Pages {
  int? order;
  String? description;
  List<String>? images;
  Pages({
    this.order,
    this.description,
    this.images,
  });

  Pages.fromJson(Map<String, dynamic> json) {
    order = json['order'] ?? 0;
    description = json['description'] ?? "";
    images = json['images'] == null ? [] : json["images"].cast<String>();
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['order'] = this.order;
    data['description'] = this.description;
    data['images'] = this.images;
    return data;
  }
}


class Tag {
  int? id;
  String? tagName;

  Tag({this.id, this.tagName});

  Tag.fromJson(Map<String, dynamic> json) {
    id = json['id'];
    tagName = json['tag_name'] ?? "";
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['id'] = this.id;
    data['tag_name'] = this.tagName;
    return data;
  }
}
 

Я не знаю, что вызывает эту ошибку. пожалуйста, помогите
Я предполагаю, что, когда я запускаю tojson, кажется, возникает проблема с типом, но я не знаю, какая часть и как ее исправить, я только начинаю с flutter, буду признателен за любой совет.

я ошибся, когда изменил код, как это.

 data['tag_list'] = this.tagList.toString();
data['pages'] = this.pages.toString();
 

ошибка заключается в

 Unhandled Exception: type 'String' is not a subtype of type 'List<Tag>?'
 

Ответ №1:

Попробуйте заменить

 tagList = json['tag_list'] ?? <Tag>[];
 

с

 tagList = List<Tag>.from(json["tag_list"].map((x) => Tag.fromJson(x)))
 

И эта строка

 data['tag_list'] = this.tagList;
 

с

 data['tag_list'] = this.tagList.map((tag) => tag.toJson()),
 

Ответ №2:

вы также должны вызвать методы toJSON() из своих тегов:

 
data['tag_list'] = this.tagList.map((tag) => tag.toJson()),
 

Комментарии:

1. и вы также неправильно расшифровываете теги в своем методе FromJSON()