go_routerとriverpodを組み合わせる「Flutterやってみたシリーズvol.01」

Date
August 15, 2023

はじめに

image

こんにちは、しくみ製作所の渡辺です。

2022年1月に入社して、最近はアプリ関連の案件だと、ネイティブのコード(ほぼjava + kotlin & swift)の案件と、Flutterの案件のサポート(プルリクをレビューなど)したりしています。

ネイティブの方の案件では動画プレイヤーを扱ったりしていて、なかなか大変です。今回は、断続的にキャッチアップを続けているFlutterに関する記事を書こうと思います。

go_routerとriverpodを組み合わせる

Flutterの中でもgo_routerの動向はかなり気になっており、少し前にやっと状態の保存ができるStatefulShellRouteが登場しました。

しかし、そもそもriverpodとShellRouteの組み合わせで事足りるんじゃ無いかと思い、今回検証してみました。

まずは、一番シンプルにStatefulShellRouteを使用してみます。

コード

しっかりbottomNavigationBar間の移動で、counterの値が保存されています。

本題から少し外れますが、bottomNavigationBarには、NavigationBarを与えています。これは、Material 3に適応した新しいWidgetです。

これをriverpodとShellRouteで書き換えたのが、下記のコードです。

コード

※動画は全く同じなので、割愛します。

ここでのポイントは @Riverpod(keepAlive: true)の部分です。

riverpod_generatorが生成するコードはautoDisposeがデフォルトなので、keepAlive: trueにしないと画面を遷移したときにproviderが破棄されるようです。

コードを見ると、StatefulShellRouteの時より長くなってます。また、上記に記載したコードの他にriverpod_generatorが生成したコードもあるので、もうちょっとだけ長くなります。

商用のアプリでは、もっと複雑な状態を管理しないといけないと思います。riverpodのようなパッケージを導入しないのは難しいと思いますので、ちょっとくらいコードが長くなるのはしょうがないかなと思います。

さいごに

今回使ったサンプルコードを下記に置いてあります。

今後もFlutterやモバイルに関する投稿を続けていきたいと思います。

🖋
新着記事