hamburger

主に日記

FlutterのFreezedで生成するClassにメソッドを追加する

この記事の内容は古くなっています。更新した以下の記事を確認してください。

hamburger-tech.hatenablog.com


Freezedで生成するクラスに、自動生成以外のメソッドを追加する方法について

公式にもちゃんと記載がありました。

pub.dev

@freezed
abstract class Person with _$Person {
  const factory Person(String name, {int age}) = _Person;

  void method() {
    print('hello world');
  }
}

このコードでは、method()が正しく生成されずにエラーになります。

This is because by default, Freezed has no way of "extending" the class and instead "implements" it.

(訳)これは、デフォルトではFreezedにはクラスを「拡張」する方法がなく、代わりにクラスを「実装」しているからです。

なので、abstract classにmixinではなくimplementsするようにしてprivate constructorを追加してあげることで独自メソッドを追加できるようになります

@freezed
abstract class Person implements _$Person { // uses implements instead of with
  const Person._(); // Added constructor
  const factory Person(String name, {int age}) = _Person;

  void method() {
    print('hello world');
  }
}