首页 > 解决方案 > 如何在 Flutter 中有字段 Timestamp 的类“flutter pub run build_runner build”?

问题描述

我正在尝试使用 cmd“flutter pub run build_runner build”从对象序列化 JSON 格式,但它一直在显示消息:

运行 JsonSerializableGenerator 时出错 无法fromJsontimeTaking. TypeHelper提供的实例都不支持定义的类型。

@JsonSerializable(explicitToJson: true)
class RequestData {
  @JsonKey(required: true)
  String uid;
  String phone;
  String email;
  String description;
  /// Tell json_serializable that "owner_name" should be
  /// mapped to this property.
  @JsonKey(name: 'owner-name')
  String ownerName;
  @JsonKey(name: 'location-detail')
  String locationDetail;
  int status;// 0 waiting, 1 accepted, 2 done, 3 DOING , 4 cancel
  List<String> imageUrls;
  @JsonKey( required: true, name: "time-taking", toJson: _timestampToJson/*,fromJson: _timeStampFromJson*/)
  Timestamp timeTaking;

  RequestData({this.uid, this.phone, this.email, this.description,
      this.ownerName, this.locationDetail, this.status, this.imageUrls,this.timeTaking});

  RequestData.none();
}

我该如何解决这个问题?

标签: firebaseflutterdarttimestamp

解决方案


我有同样的问题,我的临时解决方案是创建一个 JsonConverter 来转换为 DateTime:

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

class TimestampConvertDatetime  implements JsonConverter<DateTime, Timestamp> {
  const TimestampConvertDatetime();
  @override
  DateTime fromJson(Timestamp json) {
    return json.toDate();
  }

  @override
  Timestamp toJson(DateTime object) {
    return Timestamp.fromDate(object);
  }
}

并应用于您的模型:

...
@TimestampConvertDatetime()
DateTime date;
....

推荐阅读