ふくしま

ソフトウェアエンジニア

dartでローカルファイルとクラスを行き来する話 w/ freezed

やりたいこと

freezed の fromJsontoJson を使って、シリアライズとデシリアライズをしたい。 具体的には、ローカルファイルに書き込んだ(シリアライズした)文字列をクラスとして読み込みたい(デシリアライズしたい)。

ポイント

ポイントは convert パッケージの jsonEncodejsonDecoee を間にかますことである。

コードサンプル

シリアライズ

以下は、Sample クラスのインスタンスを受け取って文字列にするしてファイルに書き込む処理である。

static Future<File> createText(Sample sample) async {
  String contents = jsonEncode(sample.toJson());
  final file = File('sample.txt');
  await file.create(recursive: true);
  await file.writeAsString(contents);
  return file;
}

シリアライズ

以下は、File を受け取って Sample クラスを返す処理である。

static Future<Sample> getTextContents(File file) async {
  final contents = await file.readAsString();
  try {
    Sample jsonContents =
        Sample.fromJson(jsonDecode(contents));
    return jsonContents;
  } catch (e) {
    throw Exception('テキストファイルの中身の形式が間違っています。');
  }
}