我的 Dto 的结构就像 -
@freezed
abstract class MessageDto with _$MessageDto{
factory MessageDto({
String message,
@JsonKey(name: 'message_type') String messageType,
@JsonKey(name: 'sender_id') String senderId,
@JsonKey(name: 'sent_at') Timestamp sendAt,
}) = _MessageDto;
factory MessageDto.fromFirestore(DocumentSnapshot doc) {
Map<String, dynamic> json = doc.data;
return MessageDto.fromJson(json);
}
factory MessageDto.fromJson(Map<String, dynamic> json) => _$MessageDtoFromJson(json);
}
Unhandled Exception: type 'Timestamp' is not a subtype of type 'String' in type cast
最佳答案
您可以通过自定义 fromJson
和 toJson
函数到 @JsonKey
.
https://pub.dev/documentation/json_annotation/latest/json_annotation/JsonKey/JsonKey.html
Timestamp _sendAtFromJson(Timestamp timestamp) => timestamp;
@freezed
abstract class MessageDto with _$MessageDto{
factory MessageDto({
String message,
@JsonKey(name: 'message_type') String messageType,
@JsonKey(name: 'sender_id') String senderId,
@JsonKey(name: 'sent_at', fromJson: _sendAtFromJson) Timestamp sendAt,
}) = _MessageDto;
factory MessageDto.fromFirestore(DocumentSnapshot doc) {
Map<String, dynamic> json = doc.data;
return MessageDto.fromJson(json);
}
factory MessageDto.fromJson(Map<String, dynamic> json) => _$MessageDtoFromJson(json);
}
关于flutter - 如何将具有时间戳字段的 firestore doc 数据转换为通过 Freezed dart 包生成的数据类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62270356/