如何使用Flutter中的类具有字段Timestamp的“ flutter pub run build_runner build”?

时间:2020-04-06 09:44:03

标签: firebase flutter dart timestamp

我正在尝试使用cmd“ flutter pub run build_runner build”序列化来自对象的JSON格式,但它始终显示以下消息:

运行JsonSerializableGenerator时出错 无法为fromJson生成timeTaking代码。 提供的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();
}

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

我有同样的问题,我的临时解决方案是创建一个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;
....