🌴

Flutterアプリで状態管理をするときの判断基準をまとめてみた

2025/02/23に公開

個人アプリを開発している最中に、状態管理をもっと自由自在にコントロールして、手に取るようにわかるくらい理解したいと思ったため、今回はそもそもの「状態管理をする判断基準」を自分なりにまとめてみます。

状態管理の判断基準の3つのチェックポイント

1. そのデータは UI に影響を与えるか?

画面がそのデータを元に変化するなら、管理しましょう。

  • 管理すべきデータの例

    • ToDoリスト(画面に表示するデータ)
    • タスクの完了状態(チェックボックス)
    • ユーザーのログイン状態
  • 管理しなくていいデータの例

    • ボタンの一時的なアニメーション
    • ユーザーが入力中のテキスト(テキストフィールドのcontrollerで管理)

2. そのデータは複数のウィジェットで共有されるか?

複数のウィジェットで同じデータを使うなら、管理しましょう。

  • 管理すべきデータ

    • ToDoリスト(リスト表示&詳細画面で共通)
    • ログインユーザー情報(画面遷移しても保持する必要がある)
    • 設定(ダークモード・言語設定など)
  • 管理しなくていいデータ

    • 一時的なUIステート(ダイアログの開閉状態)
    • 1つの画面内で閉じるデータ(新しいタスクの入力中のテキスト)

3. そのデータは画面がリビルドされても消えない方がいいか?

画面を開き直してもデータが消えたら困るなら、管理したほうがよいです。

  • 管理すべきデータ
    • ToDoリスト(アプリを再起動しても表示されるべき)
    • ログイン状態(アプリを閉じても維持したい)
  • 管理しなくていいデータ
    • 一時的なフォーム入力(画面遷移で消えてOKなら TextEditingController で管理)
    • スクロール位置(画面を開き直したらリセットされてもOK)

今後新規機能を追加するようなことがあったらこの3つのチェックポイントを参考に状態管理を進めていこうと思います。

Discussion