Open1

Flutter基礎知識

NozoGoriNozoGori

コンストラクタについて

コンストラクタとは?

クラスから新しいオブジェクト(インスタンス)が作られる際に、自動的に呼び出される特別な関数。
役割として、以下の3パターンが挙げられる。

  1. オブジェクトの初期化:オブジェクトの初期状態を設定
  2. 必要なリソースの割り当て:オブジェクトが使用するリソースを確保
  3. 初期値の設定:クラスのプロパティに初期値を設定

Dartにおけるコンストラクタ

Dartでは、コンストラクタはクラス名と同じ名前のメソッドとして定義される。

class Person {
  String name;
  int age;

  // このPersonがコンストラクタ
  Person(this.name, this.age);
}

// コンストラクタを使用してオブジェクト(インスタンス)を生成
var person = Person('太郎', 26);

super.keyとコンストラクタの関係性

Flutterプロジェクト生成時に、初期コードは以下のようになっている。

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  
  ...
}

const MyApp({super.key}); の役割は以下の通りとなる。

  1. MyAppというクラスのコンストラクタを定義している。
  2. {super.key}は、このコンストラクタがkeyというパラメータを受け取り、それを親クラスであるStatelessWidgetのコンストラクタへ渡すことを意味する。

keyの役割

Flutterでは、各ウィジェットに一意の「キー」を割り当てることが出来る。
このキーは以下の役割を持つ。

  1. ウィジェットの識別:ウィジェットを一意に識別する。
  2. 状態の保持:ウィジェットツリーの再構築時に状態を保持する。
  3. 効率的な更新:Flutterのリコンシリエーションアルゴリズムがウィジェットを効率的に更新するのを助ける。

なぜsuper.keyが必要なのか?

Flutterは宣言的UIフレームワークで、状態が変わるたびにウィジェットツリー全体を再構築する。
この過程で、

  1. 同じウィジェットを識別するためにキーが使用される。
  2. キーがあれば、Flutterはそのウィジェットの状態を保持することができる。
  3. 動的なリストなど、ウィジェットの順序が変わる場合に特に重要である。