はじめに
こんにちは、しくみ製作所の渡辺です。
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やモバイルに関する投稿を続けていきたいと思います。
![行動も後押ししてくれる福利厚生・用途を考えるのも嬉しい時間に「リモートワーク補助金(年間15万円制度)を使ってみた」vol.10](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F46068eec-ba82-4817-afa1-d59e2d72654c%2F626003b0-810c-4245-8c1c-b8a49bb6f8be%2FIMG_5886.heic?id=4f361ab2-35ea-4e75-8081-a92e325395d4&table=block)
![インターナルコミュニケーションの土台が完成・今後もメンバーが盛り上がることのできる環境を「Slackワイワイプロジェクト」vol.02](/_next/image?url=https%3A%2F%2Fassets.super.so%2F94e0d3a8-1fa3-4798-ae86-a8fc3d261c55%2Fimages%2Ff9ebe3ef-649c-43c8-997e-10ea45c10601%2F%25E3%2583%258F%25E3%2582%259A%25E3%2583%25BC%25E3%2582%25BD%25E3%2583%25ABP%25EF%25BC%2586T.png&w=1920&q=90)