🤖

【Flutter】Firestoreに値を登録しようとした時に、うまくDateTime型からTimestam型に変換してくれない時の対処法

2024/08/12に公開

はじめに

現在、Flutterエンジニアとして活動しているこっしーです。
今回はうまくDateTime型からTimestam型に変換してくれなかったので、記事にしました

1440taskという超シンプルなTODOアプリを開発しています。
(ios)https://apps.apple.com/jp/app/1440task/id1640161652
(android)https://play.google.com/store/apps/details?id=site.studio.ringrininfo.new1440task

概要

DateTime型をFirestoreのTimestam型に変換するとき、以下のコードのようにTimestamConverを使ってましたが、うまく変換されずに文字列型として登録されてしまいました。

class TimestampConverter implements JsonConverter<DateTime?, Timestamp?> {
  const TimestampConverter();

  
  DateTime? fromJson(Timestamp? json) => json?.toDate();

  
  Timestamp? toJson(DateTime? object) =>
      object == null ? null : Timestamp.fromDate(object);
}


abstract class Model with _$Model {
  const factory Model({
    () required DateTime date,
  }) = _Model;

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

解決策

TimestampConverterを以下のように修正すると、無事に変換されました。

class TimestampConverter implements JsonConverter<DateTime, Timestamp> {
  const TimestampConverter();

  
  DateTime fromJson(Timestamp json) => json.toDate();

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

Model型がrequiredなら、TimestampConverterのfromJsonとtoJsonもrequiredにしないといけなかったですね。

初歩的なミスなので、ここで書き記しておこうと思います。

Discussion