🍭
【Flutter】jsonのencode時にdynamic型だとエラー
dynamic型について
Flutter(dart)にはdynamic型
と呼ばれる、動的に型付け可能な型が用意されています。【Dart】【Flutter】dynamic型(動的型付け)の記事にある通り、文字列だろうが数値だろうが入るような型です。
dynamic型は、例えば外部API等からデータを取得する際に、特に型付けせずにデータを取得したいなどのケースで使用するかもしれません。【Flutter】JSONをデコードするの記事にあるような例ですね。json.decode
では問題なくdynamic型が取得できるのですが、ではencodeの時どうなるのというのが今回の記事です。
dynamic型のencode
結論から言うとエラーになります。Converting object to an encodable object failedのstackoverflowの記事にある通り、dynamic型はencode不可のようです。対応方法はstackoverflowの記事でいくつか紹介されてますが、素直にclassを作成してjsonの変換関数(fromJson、toJson)を定義するのが一番手っ取り早そうです。
実装サンプル
上記のstackoverflowの記事のほぼそのままですが、実装サンプルのせておきます。型を作成した上でjson.encodeで処理すればエラーは発生しません。
sample_user.dart
class SampleUser {
final String id;
final String name;
final String mailAddress;
SampleUser({this.id, this.name, this.mailAddress});
SampleUser.fromJson(Map<String, dynamic> json)
: id = json["id"],
url = json["name"],
updatedAt = json["mailAddress"];
Map<String, dynamic> toJson() {
return {'id': id, 'name': name, 'mailAddress': mailAddress};
}
}
Discussion