DocumentReference を取得したい
Flutter初心者です。。
firestoreに置いているデータを取得するために下記のパッケージを使用して
シリアライズ(?)(fromJson, toJson)を行っています。
json_serializable
json_annotation
firestoreのドキュメント内にDocumentReference
があるのですが上記のパッケージはそれに対応しておらず、
現在DocumentReference
部分を手書きしているのですがうまく変換できていません。
こちらの記事(Firestore DocumentReference Serialization)も読んでみましたが、
そもそもDocumentReference
をString
としても取得できていないため解決にいたりませんでした。
firestoreからのデータ取得にはcloud_firestoreパッケージを使用しています。
.
シリアライズの書き方もデータ取得の方法も誤っているかもしれません。。
不勉強で申し訳ありませんが解決策またはそのヒントでもいいので
ご教授いただけないでしょうか?
よろしくお願い申し上げます。。。
以下コードです。
(MVVMのような設計になっており、
modelでシリアライズ等してviewModelでfirestoreのデータを取得するようにしています。)
(コードは簡易版です)
<pubspec.yaml> dependencies: cloud_firestore: ^0.13.0+1 json_annotation: ^3.0.1 dev_dependencies: json_serializable: ^3.2.5
model
1import 'package:cloud_firestore/cloud_firestore.dart'; 2import 'package:json_annotation/json_annotation.dart'; 3 4part 'A.g.dart'; 5 6@JsonSerializable(explicitToJson: true) 7class A{ 8 final DocumentReference docRef; 9 10 const A({ 11 this.docRef, 12 }); 13 14 factory A.fromJson(Map<String, dynamic> json) => _$AFromJson(json); 15 Map<String, dynamic> toJson() => _$AToJson(this); 16}
// GENERATED CODE - DO NOT MODIFY BY HAND part of 'A.dart'; // ************************************************************************** // JsonSerializableGenerator // ************************************************************************** Honey _$AFromJson(Map<String, dynamic> json) { return A( docRef: json['docRef'] as DocumentReference, ); } Map<String, dynamic> _$AToJson(A instance) => <String, dynamic>{ 'docRef': instance.docRef, };
viewModel
1import 'package:cloud_firestore/cloud_firestore.dart'; 2import 'package:flutter/material.dart'; 3import '../models/A.dart'; 4 5class AViewModel{ 6 7 fechA() { 8 databaseReference 9 .collection("A") 10 .getDocuments() 11 .then((QuerySnapshot snapshot) { 12 snapshot.documents.forEach((element) { print('${element.data}'); }); 13 }); 14 } 15}
debugConsoleLog
1flutter: {docRef: Instance of 'DocumentReference'}
試したこと
- こちらを参考に、これのDocumentReference, String バージョンを行おうとして
toJson
部分のコードが書けず失敗 - 上記のコードのmodel内の
final DocumentReference
やas DocumentReference
部分を~ String
として行ったが、ビルド失敗(_CastError
が出て自動でのシリアライズ失敗)
環境
macOS Catalina 10.15.4
VSCode 1.40.1
Flutter Channel beta, v1.17.0
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。