type '_InternalLinkedHashMap <String, dynamic>' n'est pas un sous-type de type 'String'

Sep 29 2020

Quelle est la bonne façon de convertir une jsonchaîne en objet avant de la stocker dans une base de données locale?

Ceci est la sortie pour i['created_by_user']:

{id: 3, name: A}

J'essaye de le lancer pour CreatedByobjecter

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

Créé par

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

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

Voici ma colonne de table locale

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

Erreur

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

Réponses

1 Nonstapp Sep 29 2020 at 17:28

Si dans fromJson () vous avez besoin d'un Map <String, dynamic> et la sortie de

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

Je pense que vous n'avez pas à le décoder.

Je vous suggérerais de remplacer

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

avec

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