Flutterで値の変化に応じて表示を自動で更新する(状態管理する)のに使用するRiverpodをなるべく簡単な方法で紹介します。様々な場所で使用されるパラメータを表示する場合に活躍するパッケージです。
Riverpodを使うための前準備
Riverpodパッケージをインストールする必要があります。
作成したFlutterプロジェクト内のpubspec.yamlに「flutter_riverpod:」と追記します。
追記箇所は以下を参照。
dependencies: flutter_riverpod: #<-- 追記 flutter: sdk: flutter
追記してファイルを保存すると、自動でインストールされます(VSCodeの場合)。
Riverpodの簡単なサンプル(Sliderの値の表示更新)
以下のようなサンプルを作成しました。
スライダーを操作するとそれに連動して数値表示が更新されます。
Riverpodを使用するうえでのポイント(必要なこと)は以下の通り。
- プロバイダーを作成
- アプリ全体(今回はapp)をProviderScope()で囲む
- 使用するクラス(今回ではMyApp)は、ConsumerWidgetクラスを拡張する
- Widget build()の引数にWidgetRef refを追加する
- 状態を把握する変数をref.watch(プロバイダ名)で宣言する
状態を監視されている変数を変更する場合は、ref.read(プロバイダ名.notifier)でnotifierを取得し、notifier.stateに値を代入します。
サンプルは以下の通り(スライダーは適当に色付けてます)。
import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; void main() { // アプリ全体をProviderScopeで囲む const app = MaterialApp(home: MyApp()); runApp( const ProviderScope( child: app, ), ); } class MyApp extends ConsumerWidget { const MyApp({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { // 状態監視する変数を宣言 final value = ref.watch(valueProvider); // スライダー final slider = Slider( value: value, onChanged: (value) { sliderValChange(ref, value); }, thumbColor: Colors.blue, activeColor: Colors.red, inactiveColor: Colors.yellow, ); // スライダー数値表示用テキスト final valuetext = Text( value.toStringAsFixed(2), ); return Scaffold( body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ slider, valuetext, ], ), ), ); } } // スライダー値のプロバイダ final valueProvider = StateProvider((ref){ return 0.0; }); // スライダーの数値変更 sliderValChange(WidgetRef ref,value){ final notifier = ref.read(valueProvider.notifier); notifier.state = value; }
これでスライダーの値が変わるとテキストの値も自動で更新されます。
変数(今回はスライダーの値value)が様々な場所で使用されている場合や、変数と状態表示を疎結合にしたい場合は、このRiverpodが活躍しそうです。
以下関連記事。
コメント