тип '_InternalLinkedHashMap <String, dynamic>' не является подтипом типа 'String'

Sep 29 2020

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

Это результат для i['created_by_user']:

{id: 3, name: A}

Я пытаюсь передать его на CreatedByобъект

 CreatedBy.fromJson(jsonDecode(i['created_by_user'])),

Создано

@JsonSerializable()
class CreatedBy{
  var name;
  var id;
   
  CreatedBy();

  factory CreatedBy.fromJson(Map<String, dynamic> json) =>
      _$CreatedByFromJson(json); Map<String, dynamic> toJson() => _$CreatedByToJson(this);
}

Здесь мой локальный столбец таблицы

TextColumn get createdByUser =>
              text().map(const CreatedBySqlConverter()).nullable()();
    
    
    class CreatedBySqlConverter extends TypeConverter<CreatedBy, String> {
      const CreatedBySqlConverter();
    
      CreatedBy mapToDart(String fromDb) {
        if (fromDb == null) return null;
        return CreatedBy.fromJson(json.decode(fromDb));
      }
    
      String mapToSql(CreatedBy createdBy) => json.encode(createdBy.toJson());
    }

Ошибка

type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'String'

Ответы

1 Nonstapp Sep 29 2020 at 17:28

Если в fromJson () вам понадобится Map <String, dynamic> и вывод

i['created_by_user'] //is a Map<String, dynamic> 

Я думаю, Тебе не нужно его декодировать.

Я бы посоветовал вам заменить

CreatedBy.fromJson(jsonDecode(i['created_by_user'])),

с участием

CreatedBy.fromJson(i['created_by_user']),