首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将具有时间戳字段的防火墙文档数据转换为通过Freezed包生成的数据类?

如何将具有时间戳字段的防火墙文档数据转换为通过Freezed包生成的数据类?
EN

Stack Overflow用户
提问于 2020-06-08 20:04:46
回答 2查看 1.3K关注 0票数 5

我的Dto的结构就像-

代码语言:javascript
复制
@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);
}

  1. 生成器不支持TimeStamp数据类型。当我使用DateTime dataType时,它正在生成代码,但在将documentSnaphot数据解析为

时抛出异常。

未处理异常:类型为

中的“String”类型不是“时间戳”类型的子类型

EN

回答 2

Stack Overflow用户

发布于 2020-09-13 16:35:55

您可以将自定义的fromJsontoJson函数传递给@JsonKeyhttps://pub.dev/documentation/json_annotation/latest/json_annotation/JsonKey/JsonKey.html

代码语言:javascript
复制
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);
}
票数 3
EN

Stack Overflow用户

发布于 2022-06-13 19:06:57

将时间戳转换为日期时间更好。

代码语言:javascript
复制
// To parse this JSON data, do
//
//     final notificationModel = notificationModelFromJson(jsonString);

import 'dart:convert';

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:freezed_annotation/freezed_annotation.dart';

part 'notification_model.freezed.dart';
part 'notification_model.g.dart';

NotificationModel notificationModelFromJson(String str) =>
    NotificationModel.fromJson(json.decode(str));

String notificationModelToJson(NotificationModel data) =>
    json.encode(data.toJson());

@freezed
abstract class NotificationModel with _$NotificationModel {
  const factory NotificationModel({
    String? title,
    String? uid,
    String? description,
    @JsonKey(name: 'createdOn', fromJson: _sendAtFromJson) DateTime? createdOn,
  }) = _NotificationModel;

  factory NotificationModel.fromJson(Map<String, dynamic> json) =>
      _$NotificationModelFromJson(json);
}

DateTime _sendAtFromJson(Timestamp timestamp) =>
    DateTime.fromMillisecondsSinceEpoch(timestamp.millisecondsSinceEpoch);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62270356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档