Как «флаттер паб запустить build_runner build» с классом имеет поле Timestamp во флаттере? - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь использовать команду 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 Ответ

1 голос
/ 06 апреля 2020

У меня та же проблема, мое временное решение - создать 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;
....
...