🎨

活性/非活性なアイコン(Icon)とボタン(Container)をriverpodで状態を監視して作る

2023/03/26に公開

概要

riverpodで状態管理して、状態に応じたアイコンとボタンを作成します。
以下、作成イメージです。

※作成したリポジトリ
https://github.com/sukekyo000/riverpod_icon_button

前提条件

・Flutter(dart)の基本的な書き方が分かる
・riverpodの基本的な書き方が分かる

バージョン

開発時のバージョンです
・Flutter 3.3.8
・flutter_riverpod: ^2.3.1

この記事で伝えたいこと

riverpodで監視している状態に応じたアイコン・ボタンが作成できる

実装

完成コード

https://github.com/sukekyo000/riverpod_icon_button/blob/main/lib/main.dart
要所の解説をします

1.アイコン・ボタンのプロバイダ作成

アイコン・ボタンそれぞれのプロバイダを作成します。
初期値は非活性である「false」を保持します。
それぞれ「iconStateProvider」、「buttonStateProvider」と命名します。
https://github.com/sukekyo000/riverpod_icon_button/blob/main/lib/main.dart#L4-L6

2.状態の監視

ConsumerWidgetでプロバイダを使用できるようにして、「iconStateProvider」と「buttonStateProvider」をwatchします。変数名は「favoriteIconState」と「buttonState」です。
https://github.com/sukekyo000/riverpod_icon_button/blob/main/lib/main.dart#L26-L32

3.状態に応じたUIの宣言

「iconStateProvider」と「buttonStateProvider」の状態に応じたUIを宣言します。
アイコンを「favoriteIcon」ボタンを「button」とし、「favoriteIconState」と「buttonState」の状態に応じて「favoriteIcon」と「button」を変更します。
favoriteIconStateがtrueであればfavoriteIconのカラーがピンク、buttonStateがtrueであれば「活性」という文字のボタンになっていると思います。
https://github.com/sukekyo000/riverpod_icon_button/blob/main/lib/main.dart#L34-L87

4.UIの構築

「favoriteIcon」と「button」を構築したい箇所に記述します。
https://github.com/sukekyo000/riverpod_icon_button/blob/main/lib/main.dart#L89-L111

5.状態の更新

アイコン・ボタンがそれぞれ押下された時の状態の更新をInkWellのonTapで記述します。
https://github.com/sukekyo000/riverpod_icon_button/blob/main/lib/main.dart#L95-L107

まとめ

以上が活性/非活性なアイコンとボタンをriverpodで状態を監視して作る方法です。
InkWellを使うことでデザインの自由度がかなり上げられ、さまざまなデザインのアイコン・ボタンを作ることができると思います。

間違っている点や質問があれば、是非コメントいただきたいです!

Discussion