flutter - 如何将具有时间戳字段的 firestore doc 数据转换为通过 Freezed dart 包生成的数据类?

标签 flutter dart

我的 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);
}

  • 生成器不支持 TimeStamp 数据类型。
  • 当我使用 DateTime 数据类型时,它正在生成代码但在将 documentSnaphot 数据解析为
  • 时抛出异常

    Unhandled Exception: type 'Timestamp' is not a subtype of type 'String' in type cast

    最佳答案

    您可以通过自定义 fromJsontoJson函数到 @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/

    相关文章:

    flutter - json_serializable - 将通用字段添加到卡住/json_serializable 类

    flutter - 发生更改时,TextFormField光标没有移动

    flutter - 使用命名路由时在空值上使用的空检查运算符

    dart - dart oauth facebook twitter登录

    flutter - 提供者在执行时不更新,Navigator.pop(context) 在 flutter 中

    flutter - flutter 测试应该保存在哪里

    Flutter 从其祖父访问子函数

    flutter - 如何在 Flutter 上更改同一行的字体?

    android - 长按时 flutter 触觉反馈

    dart - 在 Aqueduct ORM中更改命名策略