Flutterの状態管理について調べたメモ
Flutterでの状態管理方法について雑に調べた時のメモです。
先に感想を書いておくと、
Inherited Widget/Scoped Model/BLoC Patternでそれぞれ軽くアプリを書いたりしてみたけど、自分の用途レベルのアプリではScoped Modelで十分かなという感じ。BLoC Patternはweb/ios/androidでロジックを統一したい時だけ検討かな...
— 宮崎由加(24) (@razokulover) October 8, 2018
以下、有益そうな記事or動画リンクが主です。
Flutterで状態管理の仕方色々
- Flutter Architecture Samples
- Inherited Widget/Scoped Modelの他、ReduxやMVUといったパターンのサンプルもある
- (動画)Build reactive mobile apps with Flutter
- 2018年のGoogleI/Oで話されてた動画。BLoC Patterについても触れてる。
- これで話してたやつのコード。
- ↑の動画の補足とかをSpeakerがmediumに書いてるやつ
- (動画)FirebaseとFlutterを使う方法
- (動画)Flutter / AngularDart – Code sharing, better together (DartConf 2018)
Inherited Widget
- Flutterの標準ライブラリで提供されているWidget。setState + αといった感じの状態管理ができる。
- Using Flutter’s InheritedWidget to hold app state
- FlutterのWidgetのソース
- Inheriting Widgets
- Inherited widgetでカウンターを書き直した
Scoped Model
- Fuchsiaでも採用されている状態管理ライブラリ
- 状態変更をしたらnotifyListers()で通知し、変更された状態を利用する時はScopedModelDescendantでwrapして利用する感じ
- scoped_modelの実装例
- Scoped Modelでカウンターを書き直した
BLoC Pattern
- Flutterで使うStreamについて
- 登場人物
- StreamController
- Stream
- Sink
- StreamBuilder
- SinkはStreamにeventを流す
- Streamにeventが流れてくる
- StreamBuilderがStreamをlistenしてeventの通知を受けてcallbackを実行する
- StreamControllerはStream/Sinkを管理する親みたいな感じ
- 登場人物
- BLoC Pattern
- Reactive Programming - Streams - BLoC
- BLoCパターンとはなにか - FlutterとAngularの間でModelのコードを再利用する実践を通じての考察
- BLoC Patternでカウンターを書き直した
この先
実際にScopedModelあたりで大きめのアプリを書いてみる。