INDEX / JOURNAL / LOG-004
VOL. 2026 · ENGINEERING
SERIES 4 / 7
LOG-004 · WATCH READ LISTEN

Riverpod の watch・read・listen

PUBLISHED
2026 · 07 · 03
AUTHOR
MIGIWAYA
READ
約 4 分
TAGS
#flutter#dart

§ 01WHY

§ 02PROVIDER

lib/providers/counter_provider.dartDART
// 派生・読み取り専用の値
final greetingProvider = Provider<String>((ref) => 'こんにちは');
 
// 変更できる状態(Notifier)
final counterProvider = NotifierProvider<CounterNotifier, int>(CounterNotifier.new);
 
class CounterNotifier extends Notifier<int> {
@override
int build() => 0; // 初期値
 
void increment() => state++; // state を書き換えると購読側へ通知される
}

§ 03CONSUMER

lib/screens/counter_screen.dartDART
class CounterScreen extends ConsumerWidget {
const CounterScreen({super.key});
 
@override
Widget build(BuildContext context, WidgetRef ref) {
final count = ref.watch(counterProvider);
return Scaffold(
body: Center(child: Text('$count')),
floatingActionButton: FloatingActionButton(
onPressed: () => ref.read(counterProvider.notifier).increment(),
child: const Icon(Icons.add),
),
);
}
}

§ 04WATCH

DART
final count = ref.watch(counterProvider); // count が変わるたび build() が走る

§ 05READ

DART
onPressed: () => ref.read(counterProvider.notifier).increment(),

§ 06LISTEN

DART
@override
Widget build(BuildContext context, WidgetRef ref) {
ref.listen(errorProvider, (previous, next) {
if (next != null) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(next.message)),
);
}
});
// ... 通常の UI
}

§ 07RULE

入口呼ぶ場所起きること使いどころ
build()値を監視し、変化で再構築表示する値
コールバック今の値を一度読む/Notifier 取得ボタン等の操作
build()変化時に副作用(再構築しない)画面遷移・通知表示

§ 08SUMMARY

脚注 · NOTES
  1. [1]
  2. [2]
  3. [3]
同シリーズ · Flutter の基礎を実コードで学ぶ
§ + RELATED すべて見る →
INQUIRY
CONTACT
LOCATION
STATUS
Active / Open
ESTABLISHED
2024 · 5 · 5
FORM