📲

Stateless・StatefullWidgetまとめ

2024/07/01に公開

StatelessWidget

Widgetの状態が変化しないインターフィースを作成する時に、クラスに継承させる。

StatefulWidget

ユーザーのインタラクションに依存して変化するユーザーインターフェースを作成する場合、
クラスに継承させる。
StatefulウィジェットはStateを継承したクラスの状態を追跡して、描画する。
ex.)ユーザの操作によって、画面の値が変わる。データベースの値を反映させる。

setState()

値を更新する時に使うメソッド。
データの更新や、ユーザーの操作等で値が変更されたかどうか監視する。
変更があった場合に、再描画のトリガーとなる。

気づき

  • Stateless、Statefulが抽象クラスであること
    継承を暫定して作られたクラスであるため、buildメソッドの@overrideを強制させることが目的。正確にはbuildメソッドを持っているのは、StatelessクラスとStateクラス。Statefullは、stateの状態を反映している。

  • なぜ、buildメソッドはWidgetの型で指定する必要があるのか。
    buildメソッドの前になぜ、「Widgt」をつけているか疑問だった。
    答えは単純。flutterは、WidgetでしかUIを構築できないため、Widget以外を受け付けないから。

main.dart
class _MainContainerState extends State<MainContainer> {
  int number = 1;

  
  Widget build(BuildContext context) {
    return Center(
      child: TextButton(
      onPressed: () {
        setState(() {
          number = Random().nextInt(5) + 1;
        });
      },
      child: Text("$number")
    ));
  }
}

StateWidget深掘り

StateWidgetには、ライフサイクルというものが存在する。
ライフサイクルとは、StateWidgetの状態をみて、行いたい処理を定義するものである。
主に使われそうなもの、使われているものを紹介する。

  • initState() インスタンス化された時(Widgetの初期化)
  • build(Buildcontext context)画面の描画時(Widgetの構築)
  • setState() 画面の更新時(Widget再構築のトリガー)
  • deactivate() 画面の遷移(Widgetの破棄)

Discussion