riverpodを利用してWidget外で値の更新をしたい

実現したいこと

(riverpodを利用して)Widget外で値の更新をしたい

前提

mqttで受け取ったデータを利用してriverpodの値を更新したいです。
しかし、Widget外なのでrefが使えないため、理想の形が実現できていません。
今のところ、別フォルダのbuild内でインスタンス化する時にref.watchを渡してあげて動かしています。(試したこと参照)
しかし、それが正しい使用方法なのか判断できず、困っています。
これはが正しい使用方法なのか、また(riverpodを利用している、いないにかかわらず)ほかに良い方法があれば教えていただきたいです。

想定ソースコード

一部省略、簡略させています

mqtt.dart

1class mqtt{ 2 Future connect() async{ 3 //接続などの処理 4 5 //このref.watchのような形になってくれるとうれしい。 6 ref.watch(mainTextProvider.notifier).changeMainText('受け取ったデータ'); 7 } 8}

provider.dart

1final mainTextProvider =StateNotifierProvider<MainTextNotifier, String>( 2 (ref) => MainTextNotifier(), 3); 4 5class MainTextNotifier extends StateNotifier<String> { 6 MainTextNotifier() : super(''); 7 8 void changeMainText(String data) => state = data; 9} 10

試したこと

home.dart

1class HomeScreen extends ConsumerWidget { 2 Widget build(BuildContext context, WidgetRef ref) { 3 final mqttconnect = MqttHandler(state: ref.watch(mainTextProvider.notifier)); 4 5 //Widget情報 6 } 7}

mqtt.dart

1class mqtt{ 2 final _currentState; 3 mqtt({required state}) : _currentState = state; 4 5 Future connect() async{ 6 _currentState.changeMainText('受け取ったデータ'); 7 } 8}

補足情報

Flutter: 3.10.6
hooks_riverpod: ^2.3.6

コメントを投稿

0 コメント