2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「freezedパッケージ入門 – Flutterで型安全なデータクラスを簡単に作成」

Last updated at Posted at 2024-11-08

はじめに

Flutterでの開発では、データクラスの管理や更新が頻繁に発生します。freezedパッケージを使用することで、型安全かつシンプルなデータクラスを効率的に作成でき、メンテナンス性も向上します。本記事では、freezedパッケージの導入から基本的なデータクラス作成方法、JSON対応までを解説します。

freezedパッケージとは?

freezedパッケージは、Flutterで型安全なデータクラスを簡単に作成するためのツールです。従来のデータクラスを手作業で書く手間が省け、copyWithtoStringhashCodeなどの基本機能が自動で提供されます。

導入手順

まず、freezedパッケージとbuild_runnerをプロジェクトに追加します。

  1. pubspec.yamlに以下を追加して依存関係を設定します。

    dependencies:
      freezed_annotation: ^2.0.0
    
    dev_dependencies:
      build_runner: ^2.0.0
      freezed: ^2.0.0
    
    
  2. 依存関係をインストールし、build_runnerでコード生成します。

    flutter pub get
    flutter pub run build_runner build --delete-conflicting-outputs
    

データクラスの作成方法

freezedを使って、シンプルなデータクラスを作成してみましょう。

import 'package:freezed_annotation/freezed_annotation.dart';

part 'user.freezed.dart';

@freezed
class User with _$User {
  const factory User({
    required String name,
    required int age,
    String? email,
  }) = _User;
}

ポイント解説

  • @freezedアノテーションをクラスに追加すると、データクラスの機能が有効になります。
  • UserクラスにcopyWithtoStringなどの基本的な機能が自動で追加されます。
  • String? emailのように、オプショナルなプロパティも簡単に扱えます。

データのコピーを簡単に行う copyWith

データの一部だけを更新したいときは、copyWithメソッドが便利です。freezedで自動生成されるcopyWithを使用すると、新しいオブジェクトを生成しながら一部のデータだけを変更できます。

void main() {
  final user = User(name: "John", age: 25);
  final updatedUser = user.copyWith(age: 26);

  print(updatedUser); // User(name: "John", age: 26)
}

このように、データの一部のみ変更しつつ、新しいインスタンスを作成できます。

JSONのシリアライズ・デシリアライズ対応

APIと連携する際には、データをJSON形式でやり取りする必要があります。freezedjson_serializableを組み合わせることで、JSONシリアライズ・デシリアライズが簡単に行えます。

  1. pubspec.yamljson_serializableを追加します。

    dependencies:
      json_annotation: ^4.0.1
    
  2. UserクラスにfromJsonおよびtoJsonを追加します。

    import 'package:freezed_annotation/freezed_annotation.dart';
    
    part 'user.freezed.dart';
    part 'user.g.dart';
    
    @freezed
    class User with _$User {
      const factory User({
        required String name,
        required int age,
        String? email,
      }) = _User;
    
      factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
    }
    
  3. build_runnerを再度実行して、JSONメソッドを含むコードを生成します。

    flutter pub run build_runner build
    

これで、UserクラスのインスタンスをJSONに変換したり、JSONからインスタンスを生成したりできます。

使用例

void main() {
  // JSONからインスタンスを生成
  final json = {'name': 'John', 'age': 25};
  final user = User.fromJson(json);

  // インスタンスからJSONを生成
  print(user.toJson()); // {name: "John", age: 25, email: null}
}

まとめ

freezedパッケージを使えば、型安全で保守性の高いデータクラスを簡単に作成できます。copyWithやJSON対応など、freezedの基本機能を活用することで、より効率的にFlutterアプリを開発できるでしょう。ぜひ試してみてください!

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?