🙈
【Flutter】プレーンなクラスでStateProviderを更新する【Riverpod】
概要
StatelessWidgetやStatefulWidgetを書き換えてRiverpodのStateProviderを更新する方法はよく見かけるんですが、
何も継承していないプレーンなクラスでStateProviderを更新しようとしたときにちょっとつまづいたので、ちょっとメモしときます。
やり方
sample.dart
import 'package:flutter_riverpod/flutter_riverpod.dart';
final sampleProvider = StateProvider<String>((ref) => 'ほげほげ');
class Sample {
static void update() {
// StateProviderを更新する
StateProvider((ref) {
ref.read(sampleProvider.notifier).state = 'ふがふが';
});
}
}
ドキュメント見たら一番上に書いてありました。
ドキュメントを読もう(戒め)
4/10追記 『ごめん、できなかった。』
値を更新できたと思ったのは勘違いだったみたいです。
やはりConsumerWidget
かConsumerStatefulWidget
を継承したクラス内でないとStateProviderを更新できないっぽい?でした。
記事を消そうと思いましたが、「できない」というのも大事な情報かなと思ったので残しておきます。
サービスクラスからStateProviderの値を利用したい場合、
たとえば、サービスクラスからAPIサーバーへリクエストを送る際に、StateProviderで管理している値をパラメーターとして使いたいような場合では、
利用する値は、Shared Preference
やflutter secure storage
のようなローカルストレージに保存しておくのが良さそうです。
自分はそうしました。
間違っていたら、あるいは何か助言などがあればぜひ教えてください!!
Discussion