🤖
【Flutter】Firestoreに値を登録しようとした時に、うまくDateTime型からTimestam型に変換してくれない時の対処法
はじめに
現在、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