普段、Flutterを業務等で使っていく中で状態管理をする必要が出てくると思います。状態管理をする上で最近では、Riverpod
やflutter_hooks
、StateNotifier
、freezed
を使うことが多いのではないでしょうか。
私自身、状態管理をするために普段何となく使っているパッケージでも意外と人に説明しようとした時にどう説明すれば良いのか分からずに詰まってしまうと言う経験をしました。
そこで今回の記事では、なんとなく使っているけどブラックボックス化(理解をあやふやに)してしまっているパッケージについて調べたことをまとめていきます。
※状態とは、アプリのUIを構築するデータのことを言います。
まずはhooks_riverpod
とよく使われるflutter_hooks
について紹介します。
flutter_hooks
の特徴は以下の点です。
flutter_hooks
はUIの状態管理をサポートするライブラリこのようにflutter_hooks
はグローバルではなく、特定のページでのみ使うStateの管理によく使われます。そのため、使うページのbuild内でStateを定義することによってState情報へのアクセスがグローバルで定義したStateよりもアクセスがしやすくなります。
flutter_hooks
を使うにあたって、use〇〇〇を使います。
それぞれに適した使用場面があるので、それをまとめたものを表にしました。
次は、Providerの上位互換や良い所取りをしたパッケージと言われているRiverpod
について紹介していきます。
Riverpod
の特徴は以下の点です。
autoDipose
で自動で破棄できるこのようにRiverpod
を使うことによって、Stateをグローバルに定義することができるため大規模なアプリでも容易にStateを渡すことができるようになります。
Riverpod
を使うにあたって、使うライブラリの選択肢はいくつかあります。その選択肢の決め方は以下のようにする説明をよく見かけるので、紹介します。
flutter_riverpod
:FlutterでRiverpodを使うための基本機能が提供されるhooks_riverpod
:flutter_hooks
とRiverpodの両方を使用する想定で作られているriverpod
:Dartパッケージ(Dartのみで動くため、Flutterに対応していない)※個人的には、hooks_riverpod
をよく使っております。
次に紹介するのはStateNotifier
についてです。StateNotifier
は主にStateを一つしか持つことができないため、複数のStateを管理したい場合は、オブジェクトを作成して管理することになります。そのため、freezedとよく使われるパッケージです。
StateNotifier
の特徴は以下の点です。
ValueNotifier
の拡張版のようなクラスRiverpod
とfreezed
と合わせてよく使うStateNotifier
クラス:状態管理クラスが継承するクラスStateNotifierProvider
クラス:状態管理クラスを注入するクラスStateNotifier
について自分なりにまとめてみたのが以下の図です。
最後はConsumer
について紹介していきます。
Consumer
の特徴は以下の点です。
ref.watch()
で状態の値の変更を監視し、変更に応じてWidgetを再描画するref.watch()
を定義してしまうと状態が変化するたびにWidgetが丸ごと再描画されてしまうこのように、Consumer
を使うことによって再描画される範囲を限定することができるため、再描画する必要のないところのbuildを抑制することができ、アプリのパフォーマンス向上にもつなげることができます。
いかがだったでしょうか?
普段何気なく使っているパッケージでも、意外と理解があやふやだった部分もあるのではないでしょうか?
この記事を書くことを通して、自分自身のパッケージに関する理解を深めることができたので、誰かのお役に立てればと思っております。
自分自身エンジニアとしてはまだまだ未熟なので、今回の記事で間違っている部分や知見などがございましたらTwitterのDMでコメントして頂けるとありがたいです。
[flutter_hooks]
[Riverpod]
[StateNotifier]
[Consumer]
可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。
Read More可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。
Read More