[Flutter]「Dart Data Class Plugin」でDateTime型を扱う場合の注意点

このページには広告が含まれる場合があります。

 

(List型を扱う場合の注意点はこちら)

 

データクラスとしてあったら便利なメソッド群(copyWith・fromJson・toJsonなど)を、コマンド一発で自動生成してくれる「Dart Data Class Plugin」という、Android Studio付属の非常に便利なプラグイン(≠パッケージ)があります。

Dartのクラスのコード例(Personクラス)

これを使って、DateTime型を変換させると、「fromMap」メソッド及び「toMap」メソッドはこのような感じになりますが、

Dart Data Class Pluginで作ったtoMapとfromMap。postDateTimeをDateTimeのまま変換している

そのままの状態で、CloudFirestoreデータベース等での読み書きを実行すると、

‘String’ is not a subtype of type ‘DateTime’ in type cast

というエラーが出て、うまくいかないことがあります。

「type 'String' is not a subtype of type 'DateTime' in type cast」のエラー

その場合は、

fromMapメソッドの

postDateTime: map['postDateTime'] as DateTime

の箇所を、DateTime.parseメソッドを使って、一旦String型に型変換したものを解析し、

postDateTime: DateTime.parse(map['postDateTime'] as String)

toMapメソッドの

'postDateTime': this.postDateTime

の箇所を、DateTime#toIso8601Stringメソッドを使って、表記フォーマットをISO形式に変換してやるとうまくいきます。

'postDateTime': this.postDateTime.toIso8601String(),

toMapでtoIso8601String()を使い、fromMapでDateTime.parseを使ってDateTime型を変換する

(詳しくは、以下の動画で解説していますので、よろしければご覧ください)

こんな記事も読まれています

【無料】生年月日を入力するだけ!

あなたの知らない「あなた」がわかる
無料診断ツール

あすコロ式
使命・性格タイプ診断

生年月日を入力するだけで144通りの性格パターンを診断。あなたの知らない「本当のあなた(生きる目的・使命)」と「偽りのあなた(無意識の思いグセ)」がわかります!

今すぐ無料で診断する ▶

TOP