как я могу сохранить тип карты в своем ящике ? Я использую поле объектов Flutter

#flutter #dart #objectbox #flutter-objectbox

Вопрос:

Я не могу сохранить тип карты в своем поле, songInfo атрибуты

 
@Entity()
class PlaylistItem {
  int id = 0;
  int recentIndex;
  
  Map<String, Object> songInfo;
  PlaylistItem({
    this.recentIndex = 0,
    this.songInfo = const <String, Object>{} ,
  });
 
}

 

Когда я бегу: flutter pub run build_runner build он игнорирует songInfo
предупреждение : skipping property 'songInfo' in entity 'PlaylistItem', as it has an unsupported type: 'Map<String, Object>'
Почему Map является неподдерживаемым типом? Как мне сохранить карту? пожалуйста, мне нужна помощь (с примером будет приветствоваться)

Ответ №1:

Вам нужно будет создать пользовательский конвертер, как показано здесь https://docs.objectbox.io/advanced/custom-types

Вашим лучшим выбором, вероятно, было бы преобразовать его в json и сохранить его в виде строки. Непроверено, но вам понадобится что-то вроде следующего. Хотя объектная часть вашей карты делает ее немного сложнее, вам также придется написать способ сериализации объекта в json/string

   String? get dbSaveSongInfo=>
      songInfo== null ? null : json.encode(songInfo);

  set dbSaveSongInfo(String? value) {
    if (value == null) {
      songInfo= null;
    } else {
      songInfo= Map.from(
          json.decode(value).map((k, v) => MapEntry(k as String, v(handle your 2nd conversion here));
    }
  }