Flutter management statement
Notes de l'éditeur
- Ephemeral
単一ウィジェットだけで事足りるインスタンスステートメント
StatefullWidgetのこと
app state
複数・または全てのウィジェットのステートメント
- 一番基本的なヤツ
ChangeNotifier
JavaのListenerと同じで、
addListenerで登録している機能に対して、
notifyListenersでまとめて通知して必要な処理を実行させる
ChangeNotifierProvider
notifyListenersした場合に、Consumerへ型情報を丸ごと渡す場合に使う
用は型で縛るってだけ。これ使わないとObject参照になって、自分で型チェックしないといけなくなる
Consumer
ChangeNotifierProvider経由でデータを受け取って、widgetを再構築する
Notificationを受けて再描画したいwidgetに直接配置する
ちなみに通知
- InheritedWidget
子ウィジェットが親ウィジェットのデータにアクセスできるようにするヤツ。
イベントリスナー使わないで体でデータをやり取りできるって書いてあるけど、
実際はnotifier経由で更新データ受け取ってるので、内部的にはイベントリスナーと同じヤツだと思われる。
最近流行りのWEBフレームワークのリアクティブシステムを想像すればOK。
つまり、ウィジェットツリーが浅い間は問題ないけど、
深くなるとバケツリレー怠い問題が発生する
Scoped Model
InheritedWidgetとnotifyListenerの併せ技
Wiget自体はStatelessにできるが、モデルごとにnotifierを受け付けないといけなくなるため、
Widgetが大きくなると、イベント地獄になる。
どこから何のイベントが出てるのか判らなくなる問題が出てくる
- Redux
グローバル状態管理。
WEBでいうところのReduxと同じ文脈で語られてるヤツ。
State、Action、Reducerのこと。
Vuexでいう所の、State、Action、Mutationのこと。
ログイン状態みたいに、シングルトンなデータが対象のモノに使う
これが守られてないと死ねるらしい。
※スマホは裏でマウントしたままとか何とか。
BLoC
StreamBuilderを使って、Stream経由で変更データを受け取る方法
Streamを渡してくるのはMVCの文脈でいうところのモデル
モデルが画面からの入力を受け取って、バリデーションしたりデータを加工したりした結果をStreamで流す。
StreamBuilderはデータが流れてくれば、Widgetを再構築するので、Widgetのリビルドが必要な箇所をピンポイントで再描画できるから、
理屈上簡単に負荷の低い画面が作れる。
Bissiness Logic Componentって名前付いてるから、まぁロジックが入ってるけど、
別にStreamでデータを更新するようにすればModelがあろうが無かろうがどっちでも良さげ、というのが自分の見解。
RxDartと組み合わせて、最後に入力された値が正常のものをサブミット時は返すとかするとスムーズになる。
※異常時はデータは空になる