J'utilise le package Dart "json_serializable" pour désérialiser sous la structure de données Firestore dans l'application Flutter.
@JsonSerializable() class Book { String googleBookId; List<Provider> providers; Book(this.googleBookId, {List<Provider> providers}) : providers = providers ?? <Provider>[]; factory Book.fromJson(Map<String, dynamic> map) => _$BookFromJson(map); Map<String, dynamic> toJson() => _$BookToJson(this); } @JsonSerializable() class Provider { String providerId; Provider(this.providerId); factory Provider.fromJson(Map<String, dynamic> map) => _$ProviderFromJson(map); Map<String, dynamic> toJson() => _$ProviderToJson(this); }
Et ci-dessous se trouve la classe Model à mapper:
{ googleBookId: jjl4BgAAQBAJ, providers: [ {providerId: 2FA9fULKLLf7VUPPFnFRnv}, {providerId: 8UYTGUHY7UJS432FVBJRnv} ] }
3 Réponses :
D'accord, donc je ne sais pas si vous savez, mais firestore
vous envoie une carte
pas JSON. Vous essayez d'utiliser le sérialiseur JSON.
JSON est
Carte
pendant que Firestore envoie
Map
Vous ne pouvez donc pas utiliser l'analyse en tant que json.
Vérifiez ceci https: / /medium.com/@atul.sharma_94062/how-to-use-cloud-firestore-with-flutter-e6f9e8821b27
Comme indiqué dans autre question , j'ai pu désérialiser le document Firestore en encodant dans la chaîne JSON et de nouveau en objet JSON avant la désérialisation.
@Chiziaruhoma Ogbonda merci pour la clarification, cela m'aide à penser d'une autre manière plutôt directement liée à la désérialisation du document .
La solution consiste à utiliser anyMap et propriétés explicitToJson .
@JsonSerializable(explicitToJson: true, anyMap: true) class Book { }
p>