【发布时间】:2019-08-15 18:15:08
【问题描述】:
我的 Firestore 数据库中有一个简单的消息文档,其中包含一些字段。
我使用json_serializable 将其反序列化为对象。我的班级如下所示:
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:equatable/equatable.dart';
import 'package:json_annotation/json_annotation.dart';
part 'message_firestore.g.dart';
@JsonSerializable(nullable: true, explicitToJson: true)
class MessageFirestore extends Equatable {
MessageFirestore(
this.id, this.content, this.conversationId, this.senderId, this.dateSent);
factory MessageFirestore.fromJson(Map<String, dynamic> json) =>
_$MessageFirestoreFromJson(json);
Map<String, dynamic> toJson() => _$MessageFirestoreToJson(this);
@JsonKey(name: 'Id')
final String id;
@JsonKey(name: 'Content')
final String content;
@JsonKey(name: 'ConversationId')
final String conversationId;
@JsonKey(name: 'SenderId')
final String senderId;
@JsonKey(name: 'DateSent', fromJson: _fromJson, toJson: _toJson)
final DateTime dateSent;
static DateTime _fromJson(Timestamp val) =>
DateTime.fromMillisecondsSinceEpoch(val.millisecondsSinceEpoch);
static Timestamp _toJson(DateTime time) =>
Timestamp.fromMillisecondsSinceEpoch(time.millisecondsSinceEpoch);
}
文档中没有名为Id的字段,所以目前它的id没有被反序列化。
但是,从 Firestore 检索到的地图的
我希望在反序列化期间能够访问文档的 id (_b03002...)。key 是它的 id,因此可以通过手动反序列化地图来读取此值。
有什么方法可以配置json_serializable 读取这个id 并将其存储在id 属性中?
【问题讨论】:
-
> 但是,从 Firestore 检索到的地图的关键是它的 id....
key你在说什么?一个 Map 有很多键。 -
我所说的
keyof the map 是屏幕截图上的b0300...id。我发现它在DocumentSnapshot中作为属性documentID可用。我希望在反序列化对象时可以访问此 ID。我会尝试在我的问题中澄清这一点。
标签: flutter dart google-cloud-firestore