Flutter Stateful Widgetライフサイクル-1.生成者


次に、マテリアルライブラリのチェックボックスWidgetを使用して画面にチェックボックスを描画する例を示します.

チェックボックスは、通常のステータスウィジェットです.分かりやすいように、ステータスウィジェットのライフサイクルを説明するには、チェックボックスを使用します.
1.コンストラクション関数(コンストラクション関数)
ヒートシンクの内部構造はまだ分かりません.ただし、コンポーネントもオブジェクトなので、コンストラクション関数があります.コンポーネントが持つプロパティ(property)をジェネレータで渡します.
次はbuildメソッドでチェックボックスを作成する部分です.ここで生成者呼び出しを行います.
  생략...
 
  bool _value1 = false;

  
  Widget build(BuildContext context) {
  	// 생성자가 호출된다.
    return Material(
      child: Checkbox(value: _value1, onChanged: (value) {
        setState(() {
          _value1 = value;
        });
      }),
    );
  }
  생략...
MaterialAppコンポーネントのジェネレータを呼び出して返します.また、ジェネレータのchildパラメータ(parameter)は、他の部品のタイプです.チェックボックスコンポーネントのジェネレータを再度呼び出し、チェックボックスコンポーネントに渡します.チェックボックスコンポーネントの作成者はvalueという名前の名前のパラメータ(named parameter)によってチェックボックスを選択するかどうかを決定します.onChardedパラメータは、チェックボックスコンポーネントの内部状態が変化したときのイベントを処理するコールバック関数(callback)を渡します.
これらの部品の生成器により,その部品の属性(性質)や初期状態などを決定することができる.これは部品の再利用性の核心部分です.部品のプロパティをジェネレータに渡すことができない場合は、部品の生または形状を変更するたびに新しい部品を生成する必要があります.
ジェネレータとライフサイクルなので難しいと思うかもしれませんが、これは私たちが知っている内容です.怖がらないで.
チェックボックスWidgetのビルダー宣言は次のとおりです.
class Checkbox extends StatefulWidget {
  // 생성자 선언부
  const Checkbox({
    Key key,
     this.value,
    this.tristate = false,
     this.onChanged,
    this.mouseCursor,
    
    중략...
    
    this.autofocus = false,
  }) : assert(tristate != null),
       assert(tristate || value != null),
       assert(autofocus != null),
       super(key: key);
       
       
  // 위젯 클래스 멤버 변수 선언부     
  final bool value;
  final ValueChanged<bool> onChanged;
  final MouseCursor mouseCursor;
... 생략
チェックボックス部品クラスは、StatefulWidgetという親部品をextendsキーワードとして継承します.したがって、CheckBox WidgetはStateful Widgetである.
class Checkbox extends StatefulWidget 
 ... 생략
ジェネレータ宣言を見てみましょう.長さと定義の一般的な関数はあまり差がありません.この関数がコンストラクション関数であることは、クラス名と同じ関数名を持つためであることがわかります.ジェネレータはクラスを生成する特殊な関数です.△厳密に言えば、私はこの話が正しいかどうか分かりません.
  const Checkbox({
    Key key,
     this.value,
    this.tristate = false,
     this.onChanged,
    this.mouseCursor,
    
    중략...
    
    this.autofocus = false,
  }) 
ジェネレータの重要な役割は、クラスメンバーを初期化することです.次に宣言するクラスメンバー変数をジェネレータで初期化します.前述したように、作成者のパラメータ宣言でメンバー変数がthis.valueなどの形式で参照されている場合、valueメンバーはそのパラメータ値に初期化されます.
ジェネレータのパラメータ宣言を表示します.
@requiredがすぐ前にある場合は、ジェネレータを呼び出すときにパラメータにプロパティを渡す必要があります.
「this.tristate=false」という言葉は、コンストラクション関数を呼び出すときに、tristateパラメータとして何も渡さなくてもfalseがデフォルトで使用されることを意味します.コンストラクション関数では、呼び出し時に値を超えず、デフォルト値がないフィールドはnullを超えると実質的に見なされます.
ジェネレータの下のassert文はdebugモードでカッコ内の式が偽の場合、エラーが発生します.そのため、致命的な誤りを早期に発見するのに役立ちます.assert文によれば、3つの状態はnullではありません.
ジェネレータを定義する際に最も重要な点は、このコンポーネントを作成するときに外部からどの属性または論理を注入する必要があるかです.通常、このコンポーネントで変更できる論理または属性は、関数または値として外部から注入する必要があります.例えば、コンテナをContainerコンポーネントに提示するロジックはContainerコンポーネント内部の不変のロジックであるため、注入は不要であるが、GestureDetectorではtapイベントが発生すると、GestureDdetectorコンポーネントインスタンスによってtapを処理するロジックが異なる場合があり、外部から注入する必要がある.これにより、ジェネレータは部品の再利用性の核心となる.
[続きは…]
[reference]
1. Life cycle in flutter