flutter dart: как закодировать карту / словарь в JSON

#json #flutter #dictionary #dart #encoding

#json #flutter #словарь #dart #кодирование

Вопрос:

Мне удалось декодировать словарь JSON, но как я могу сделать обратное — кодирование?

 class Achievements {
  Achievements({this.skills});
  var skills = Map<String, SkillHist>();
// ==================================================ENCODING DICTIONARY
  factory Achievements.fromJson(Map<String, dynamic> json) {
    var innerMap = json['skills'];
    var skillMap = Map<String, SkillHist>();
    innerMap.forEach((key, value) {
      skillMap.addAll({key: SkillHist.fromJson(value)});
    });
    return Achievements(
      skills: skillMap,
    );
  }
// ==================================================DECODING DICTIONARY
  Map<String, dynamic> toJson() => {
    "skills": skills == null ? null : Map // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  };
}

class SkillHist {
  SkillHist({this.currentSkill, this.skillLevel, this.skillEarnedDate});
  final int currentSkill;
  final List<int> skillLevel;
  final List<DateTime> skillEarnedDate;

  factory SkillHist.fromJson(Map<String, dynamic> json) {
    return SkillHist(
    currentSkill: json["currentSkill"] == null ? null : json['currentSkill'],
    skillLevel: json["skillLevel"] == null ? null : List<int>.from(json["skillLevel"].map((x) => x)),
    skillEarnedDate: json["skillEarnedDate"] == null ? null : List<DateTime>.from(json["skillEarnedDate"].map((x) => x)),
    );
  }

  Map<String, dynamic> toJson() => {
    "currentSkill": currentSkill == null ? null : currentSkill,
    "skillLevel": skillLevel == null ? null : List<int>.from(skillLevel.map((x) => x)),
    "skillEarnedDate": skillEarnedDate == null ? null : List<DateTime>.from(skillEarnedDate.map((x) => x)),
  };
}
  

Имея в виду эту проблему, я также начал задаваться вопросом, как я реализовал декодирование списка, который я скопировал из какого-то фрагмента несколько месяцев назад.
Почему я использую

 "skillEarnedDate": List<DateTime>.from(skillEarnedDate.map((x) => x)),
  

и не просто

 "skillEarnedDate": skillEarnedDate,
  

skillEarnedDate список уже есть, так почему я должен инициировать новый?