Loading...
Loading...
Use Ref and WidgetRef to read, watch, listen, invalidate, and refresh providers; onDispose and onCancel lifecycle; ref.read vs ref.watch vs ref.listen, ref.invalidate and ref.refresh. Use when interacting with Riverpod providers from widgets or other providers, when to use watch vs read, or when resetting provider state. Use this skill whenever the user asks about ref.watch, ref.read, ref.listen, ref.invalidate, or Riverpod lifecycle.
npx skill4agent add serverpod/skills-registry riverpod-refsRefthis.refrefrefbuild(context, ref)refrefref.listenManual// In a widget
final tick = ref.watch(tickProvider);
return Text('Tick: $tick');
// Side effect when provider changes
ref.listen(tickProvider, (previous, next) {
print('Tick changed from $previous to $next');
});ref.watch(provider.select((value) => ...))onPressed: () {
final tick = ref.read(tickProvider);
print('Current tick: $tick');
}ref.invalidate(tickProvider);
// or
final newTick = ref.refresh(tickProvider);final provider = StreamProvider<int>((ref) {
final controller = StreamController<int>();
ref.onDispose(controller.close);
return controller.stream;
});