😎
freezedで作ったクラスにColorを持たせたかったので、json converterを使った話
タイトルにあるようにfreezedで作ったクラスにColorを持たせたかったのですが、Jsonデータをパースするために fromJson()を記述したところ、エラーが出てしまいました。
エラーとなってしまったコード
import 'package:flutter/material.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
part 'sample.freezed.dart';
part 'sample.g.dart';
class Sample with _$Sample {
const factory Sample({
required String sample,
required Color color, //←ここでエラー
}) = _Sample;
factory Sample.fromJson(Map<String, dynamic> json) => _$SampleFromJson(json);
}
そのためjson converterを書いて、エラー対応をしました
import 'package:flutter/material.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
class ColorConverter implements JsonConverter<Color, int> {
const ColorConverter();
Color fromJson(int value) => Color(value);
int toJson(Color color) => color.value;
}
import 'package:flutter/material.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
part 'sample.freezed.dart';
part 'sample.g.dart';
class Sample with _$Sample {
const factory Sample({
required String sample,
() required Color color, //← @ColorConverter()をつける
}) = _Sample;
factory Sample.fromJson(Map<String, dynamic> json) => _$SampleFromJson(json);
}
freezedで同じような状態になった方の一助になれば幸いです!
【参考】
Discussion