🎉

Flatterでシングルトンクラスを作成する

2022/06/13に公開

Flutterアプリを作成する際、Dartでシングルトンクラスを実装する方法をまとめておきます。

下記にクラス定義のコードを記載します。

class Singleton {
  // ①
  static final Singleton _instance = Singleton._internal();

  // ③
  factory Singleton() {
    return _instance();
  }
  
  // ②
  Singleton._internal();
}

まずは、 でstaticな変数としてインスタンスを作成しています。
実際にインスタンスを作成するのは のコンストラクタです。
Dartでは、 クラス名._任意の文字列() でprivateなコンストラクタを定義できます(参考)。

先頭のアンダースコア (_) がprivateであることを表し、今回は Singleton._internal() としていますが、 Singleton._() のようにアンダースコアだけで表現されることもあります。

実際にインスタンスを作成する際は、下記のように行います。

main() {
  Singleton instance = Singleton();
}

これにより、 のfactoryコンストラクタが呼ばれ、 で作成された のインスタンスを返します。

factoryコンストラクタは、自動でインスタンスを作成せずに、コンストラクタ内で任意のインスタンスを返すことが可能です(参考)。
factoryコンストラクタという言語仕様により、 javaなどでよくある getInstance などのstaticメソッドを定義する必要が無くなり、クラスの利用者がインスタンスの初期化方法を意識する必要がなくなります。

Discussion