この記事は、【 可茂IT塾 Advent Calendar 2021 】の22日目の記事です。
Flutterアプリ開発に関することをブログにしました。誰かのお役に立てれば幸いです。
オブジェクトを含むFreezedクラスのインスタンスをJSON化して、FireStoreに追加しようとしたときにエラーが起きました。 原因は、オブジェクトの部分が、うまくJSONに変換されていなかったことでした。
似たようなFreezedクラスのコード例です。
import 'package:freezed_annotation/freezed_annotation.dart';
part 'match.freezed.dart';
part 'match.g.dart';
// オブジェクトを含んだFreezedクラス
class Match with _$Match {
const factory Match({
required String id,
required Team homeTeam, //オブジェクト
required Team awayTeam, //オブジェクト
('') String tournament,
}) = _Match;
factory Match.fromJson(Map<String, dynamic> json) => _$MatchFromJson(json);
}
このようなクラスのインスタンスをJSONにして、printすると、
print(match.toJson());
// printされた内容
{
id: XXXXXXXXXXXXXXX,
awayTeam: Team(id: kashiwa, name: 柏), // ここのオブジェクトがJSONになっていない
homeTeam: Team(id: nagoya, name: 名古屋), // ここのオブジェクトがJSONになっていない
tournament: J1
}
上記のようになり、オブジェクトの部分が、JSONにうまく変換されていませんでした。
(explicitToJson: true)
上の一行を追加するだけで、解決します。
import 'package:freezed_annotation/freezed_annotation.dart';
part 'match.freezed.dart';
part 'match.g.dart';
class Match with _$Match {
(explicitToJson: true) // ここに一行追加
const factory Match({
required String id,
required Team homeTeam, //オブジェクト
required Team awayTeam, //オブジェクト
('') String tournament,
}) = _Match;
factory Match.fromJson(Map<String, dynamic> json) => _$MatchFromJson(json);
}
{
id: XXXXXXXXXXXXXXX,
awayTeam: {id: kashiwa, name: 柏},
homeTeam: {id: nagoya, name: 名古屋},
tournament: J1
}
オブジェクトの部分もうまくJSONになりました。
https://github.com/rrousselGit/freezed/issues/86
可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。
Read More可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。
Read More