[Flutter]widgetのstateを管理する3つの方法(Managing state)

image

このページは何?

Flutterの公式チュートリアルのまとめ記事です。

この記事を読む上で必要な知識を以下の記事にもまとめていますので、是非ご覧ください。

image [Flutter]ボタンを実装する方法をサンプルコード付き解説(基礎)

state管理の3つのポイント

  • stateを管理する方法にはいくつかのアプローチ法がある
  • widget作成者はアプローチ方法を選択する必要がある
  • もし良いアプローチ方法がわからなければ、親widgetで管理するアプローチから始めましょう

管理方法の選び方

基本的には以下の三つの中から選ぶことになります。

  • 自分自身で管理する
  • 親widgetで管理する
  • 自分自身と親で分けて管理する

どのアプローチ方法を使うかは以下のように決めることができます。

  1. checkboxのオンオフ、スライダーのポジションのようなものは親widgetが管理するのが良いでしょう
  2. アニメーションのようなものの場合自分自身で管理するのが良いでしょう

もし見当もつかない場合はとりあえず親widgetで管理しておくのが良いでしょう。

サンプルコード

サンプルコードでは以下の動画のように、ほぼ同じような動きをするwidgetを3つの管理方法を使って実装していきます。

自分自身で管理する方法 (TapboxA)

まずは1番簡単な方法から解説していきます。

ポイントは以下の4点

  • TapboxAのstateを管理している
  • _activeがtapboxAの色をきめている
  • _handleTap()メソッドがsetState()メソッドを読んでUIを更新している
  • 全ての実装が自分自身()tapboxAに実装されている

親widgetが管理する方法

ポイントは以下の三つ

  • Tapboxの_activeを管理する
  • tapboxがタップされた時_handleTapboxChanged()が呼ばれる
  • _activeが変化するとき、setState()が呼ばれ、UIが更新される

自分自身と親とで分けて管理する場合

ポイントは以下の6点

  • _parentWidgetState2は_activeを管理する
  • _parentWidgetState2はboxがタップされた時_handleTapboxChanged()を呼ぶ
  • _parentWidgetState2はboxがタップされた時、setStateを呼びUIを更新し_activeを変化させる
  • _TapboxCStateは_highlightを管理する
  • GestureDetectorはタップイベントを感知します
  • _TapboxCStateはsetStateが呼ばれるとUIを更新し_highlightを変更します。

サンプルコードの全貌

以下のコードをmain.dartにコピペすれば、動きを確認できます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


error: Content is protected !!