😎

freezedで作ったクラスにColorを持たせたかったので、json converterを使った話

2022/07/18に公開

タイトルにあるように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で同じような状態になった方の一助になれば幸いです!

【参考】
https://qiita.com/rei_012/items/281b716f22482419834b

Discussion