Typ '_InternalLinkedHashMap <String, dynamic>' ist kein Subtyp vom Typ 'String'

Sep 29 2020

Was ist der richtige Weg, um eine jsonZeichenfolge in ein Objekt umzuwandeln, bevor sie in einer lokalen Datenbank gespeichert wird?

Dies ist die Ausgabe für i['created_by_user']:

{id: 3, name: A}

Ich versuche es zum CreatedByObjekt zu machen

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

Erstellt von

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

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

Hier meine lokale Tabellenspalte

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());
    }

Error

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

Antworten

1 Nonstapp Sep 29 2020 at 17:28

Wenn Sie in fromJson () eine Map <String, dynamic> und die Ausgabe von benötigen

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

Ich denke, Sie müssen es nicht entschlüsseln.

Ich würde vorschlagen, dass Sie ersetzen

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

mit

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