mcpField
R
riverpod-observers

riverpod-observers

github.com/serverpodDevelopment1074 installsUpdated 34w ago
Repository

About riverpod-observers

riverpod-observers is a skill for using Riverpod ProviderObserver lifecycle events to log, analyze, or debug provider changes. It covers attaching observers and naming providers, as well as a caveat about in-place state mutations.

Key features

  1. 01Observe provider lifecycle events
  2. 02Attach observers to scopes or containers
  3. 03Log provider updates
  4. 04Name providers for clearer logs
  5. 05Account for in-place mutations

Use cases

  1. 01Logging provider value changes
  2. 02Debugging provider behavior
  3. 03Tracking updates for analytics

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/serverpod/skills-registry --skill riverpod-observers

After installing, type/riverpod-observersin Claude Code to confirm it loaded.

Details

From the project README

Riverpod — ProviderObservers

Instructions

A ProviderObserver receives lifecycle events for providers (e.g. when a provider's value changes). Use it for logging, analytics, or debugging.

Implementing an observer

Extend ProviderObserver and override the methods you need (e.g. didUpdateProvider). Pass instances to ProviderScope or ProviderContainer via the observers parameter.

Example: logger
final class Logger extends ProviderObserver {
  @override
  void didUpdateProvider(
    ProviderObserverContext context,
    Object? previousValue,
    Object? newValue,
  ) {
    print('{"provider": "${context.provider}", "newValue": "$newValue"}');
  }
}

void main() {
  runApp(
    ProviderScope(
      observers: [Logger()],
      child: const MyApp(),
    ),
  );
}
Naming providers

For clearer logs, give providers a name:

final myProvider = Provider<int>((ref) => 0, name: 'MyProvider');

With code generation, a name is usually assigned automatically.

Note on mutations

If state is mutated in place (e.g. a List with ref.notifyListeners), previousValue and newValue in didUpdateProvider may be the same reference. For distinct values, clone before mutating.

Comments

Markdown supported