Как десериализовать строковое представление списка карт в Dart - PullRequest
0 голосов
/ 30 октября 2019

У меня есть представление фильма, который я храню в базе данных SQLite. Он состоит из идентификатора и списка жанров.

Жанр состоит из идентификатора и имени.

У меня возникли проблемы с десериализацией списка жанров после того, как пришлось сгладить иерархию досохранить его как строку в базе данных.

Список жанров в базе данных выглядит следующим образом:

[{id: 1, name: Comedy}, {id: 2, name: Drama}]

Как десериализовать строку базы данных в объект моего класса Movie?

class Genre {
  int id;
  String name;
  Genre({this.id, this.name});
  factory Genre.fromMap(Map<String, dynamic> map) => Genre(
        id: map["id"],
        name: map["name"],
      );

  Map<String, dynamic> toMap() => {
        "id": id,
        "name": name,
      };
}

class Movie {
  int id;
  List<Genre> genres;
  Movie({this.id, this.genres});

  factory SqLiteMovie.fromMap(Map<String, dynamic> map) => SqLiteMovie(
        id: map["id"],
        genres: List<Genre>.from(map["genres"].map((x) => Genre.fromMap(x))), // offending line
      );

  Map<String, dynamic> toMap() => {
        "id": id,
        "genres": List<dynamic>.from(genres.map((x) => x.toMap())).toString(), // need toString to store in db
      };
}

1 Ответ

0 голосов
/ 30 октября 2019

Полагаю, вы используете плагин sqflite, поскольку документация говорит:

Вложенный контент не поддерживается

Итак, у вас есть два варианта:

  • выравнивание иерархии
  • кодирование вложенных карт и списков в виде json (или другого формата), объявление столбца как строки.

Вы также можетепроверьте это пример

надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...