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']),