riverpod-from-provider
Migrate from package:provider to Riverpod; ChangeNotifierProvider, ProxyProvider to ref.watch, context.watch to ref.watch, ConsumerWidget, incremental…
Skill by serverpod
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/serverpod-riverpod-from-provider
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/riverpod-from-provider
What's inside
- Skill name
riverpod-from-provider- Description
- Migrate from package:provider to Riverpod; ChangeNotifierProvider, ProxyProvider to ref.watch, context.watch to ref.watch, ConsumerWidget, incremental migration, family and autoDispose. Use when the user is migrating from Provider to Riverpod, or asks about Provider vs Riverpod, or how to replace ProxyProvider/ChangeNotifierProvider.
- License
- BSD-3-Clause
- Instructions
- 94 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# Riverpod — Migrating from Provider
## Motivation
Riverpod was created as a successor to Provider, addressing InheritedWidget limitations:
- **Same type:** Provider can't have two `Provider<Item>` in the tree (only the nearest is found). Riverpod has no such limit; providers are identified by variable, not type.
- **Combining providers:** ProxyProvider is tedious and error-prone. In Riverpod, use **ref.watch** inside a provider to depend on others; composition is straightforward.
- **AsyncValue:** Riverpod can expose previous data while loading (e.g. show old list + loading indicator). Provider doesn't offer this cleanly.
- **Safety:** Provider can throw `ProviderNotFoundException` at runtime. Riverpod avoids this by design.
- **Disposal:** Provider can't react when consumers stop listening; scoping is tricky. Riverpod offers **autoDispose** and **ref.keepAlive** for clear lifecycle and caching.
- **Parameters:** Riverpod's **.family** gives type-safe, parameterized providers with per-parameter state; with autoDispose, state is disposed when unused. Equivalent in Provider is impractical.
- **Testing:** With Provider you must re-define providers per test. With Riverpod, override with **overrides** to mock.
- **Side effects:** Riverpod offers **ref.listen** for reacting to changes (e.g. navigation, snackbars). Provider has no built-in equivalent.
The main API change: use **ConsumerWidget** (and **WidgetRef**) instead of StatelessWidget, and **ref.watch** / **ref.read** instead of **context.watch** / **context.read**.
---
## Quickstart
- Read the Riverpod getting started guide (riverpod-getting-started) and try a small example.
- Migrate **incrementally**. You can run Provider and Riverpod side by side (use import aliases if needed).
### Start with ChangeNotifierProvider
Keep existing **ChangeNotifier** classes and wrap them in Riverpod's **ChangeNotifierProvider**:
```dart
final myNotifierProvider = ChangeNotifierProvider<MyNotifier>((ref) => MyNotifier());
```
Use **ProviderScope** at the root. Replace **context.watch** with **ref.watch** where this provider is used (e.g. in a ConsumerWidget). No need to convert every ChangeNotifier to a Notifier immediately.
### Start with leaves
Migrate providers that have no dependencies first (the "leaves"), then those that depend on them. Avoid migrating ProxyProviders until their dependencies are migrated.
### One provider at a time
Migrate and test one provider at a time. Full migration of a ChangeNotifier means: (1) convert to **Notifier** + **NotifierProvider**, (2) replace every **context.watch** for it with **ref.watch**.
### ProxyProvider → ref.watch
In Riverpod, combining providers is done with **ref.watch** inside another provider:
```dart
final labelProvider = Provider<String>((ref) {
final userIdNotifier = ref.watch(userIdNotifierProvider);
return 'The user ID is ${userIdNotifier.userId}';
});
```
For stateful combined objects (like ChangeNotifierProxyProvider), use **ref.listen** in the provider to react to another provider and update your notifier.
### Eager initialization
Riverpod providers are lazy. To warm data at startup, watch the provider at the root (e.g. in a Consumer under ProviderScope that returns your app as child). See riverpod-eager-initialization.
### Code generation
Code gen doesn't generate ChangeNotifierProvider. You can use a small extension (listenAndDisposeChangeNotifier) to expose ChangeNotifier with @riverpod during migration; once you switch to Notifier, remove the extension. See the official quickstart for the snippet.
---
## Provider vs Riverpod
### Defining providers
- **Provider:** Providers are widgets (e.g. inside MultiProvider).
- **Riverpod:** Providers are top-level **final** variables. No widget tree for definitions. Add **ProviderScope** at the root of the app.
### Reading
- **Provider:** `context.watch<T>()`, `context.read<T>()`, `context.select<T,R>(...)`.
- **Riverpod:** Use **ConsumerWidget** (or Consumer) to get **WidgetRef ref**; then **ref.watch(provider)**, **ref.read(provider)**, **ref.watch(provider.select(...))**.
- Use **watch** in build, **read** in event handlers. Same mental model as Provider.
### Consumer
Riverpod has **Consumer** with `(context, ref, child)`. No need for Consumer2, Consumer3, etc.: just multiple **ref.watch** calls in one builder.
### Scoping vs family + autoDispose
Provider uses scoping to destroy state or have per-page state. In Riverpod:
- **autoDispose** destroys state when there are no listeners (ref.onCancel / ref.onDispose).
- **.family** gives parameterized providers (one state per parameter). Use with autoDispose to avoid unbounded cache.
So: use **.family** for "state per X" and **.autoDispose** for "destroy when unused" instead of scoping.
See riverpod-getting-started, riverpod-providers, riverpod-family, and riverpod-auto-dispose for details.From serverpod/skills-registry, BSD-3-Clause.
More from serverpod/skills-registry
- 0.475score
riverpod-family
serverpod
Use Riverpod family providers to pass parameters and cache per parameter; FutureProvider.family, NotifierProvider.family, autoDispose with family, overriding…
SkillDFreshness: D★ 10Claude Code +9 - 0.475score
riverpod-getting-started
serverpod
Install Riverpod (flutter_riverpod or riverpod), wrap the app in ProviderScope, run a hello-world provider, and optionally enable riverpod_lint and code…
SkillDFreshness: D★ 10Claude Code +9 - 0.475score
riverpod-containers
serverpod
Use ProviderScope in Flutter and ProviderContainer in Dart for Riverpod; where provider state is stored, overrides, observers, testing with…
SkillDFreshness: D★ 10Claude Code +9 - 0.475score
riverpod-eager-initialization
serverpod
Eagerly initialize Riverpod providers at app startup by watching them in a root Consumer; handle loading/error in the initializer, AsyncValue.requireValue.
SkillDFreshness: D★ 10Claude Code +9 - 0.475score
riverpod-consumers
serverpod
Use Riverpod Consumer, ConsumerWidget, and ConsumerStatefulWidget to read and watch providers in widgets; WidgetRef, builder ref parameter.
SkillDFreshness: D★ 10Claude Code +9 - 0.475score
riverpod-faq-and-practices
serverpod
Answers Riverpod FAQ (ref.refresh vs invalidate, ConsumerWidget vs StatelessWidget, Ref vs WidgetRef, reset all providers, ref after unmount) and do/don't…
SkillDFreshness: D★ 10Claude Code +9 - 0.475score
riverpod-testing
serverpod
Test Riverpod providers and widgets; ProviderContainer.test, unit tests, widget tests with ProviderScope, tester.container(), mocking with overrides…
SkillDFreshness: D★ 10Claude Code +9 - 0.475score
riverpod-3-0-migration
serverpod
Migrate Riverpod from 2.0 to 3.0; automatic retry, paused listeners, legacy providers import, Ref simplification, FamilyNotifier removal, ProviderException…
SkillDFreshness: D★ 10Claude Code +9 - 0.475score
riverpod-auto-dispose
serverpod
Enable automatic disposal of Riverpod providers when they have no listeners; keepAlive, onDispose, invalidate, ref.keepAlive.
SkillDFreshness: D★ 10Claude Code +9 - 0.475score
riverpod-cancel
serverpod
Cancel or debounce Riverpod async requests with ref.onDispose; cancel when user leaves the page, debounce rapid refreshes.
SkillDFreshness: D★ 10Claude Code +9 - 0.475score
riverpod-codegen-and-hooks
serverpod
Use Riverpod code generation (@riverpod, riverpod_generator) and hooks (hooks_riverpod, HookConsumerWidget, flutter_hooks with Riverpod).
SkillDFreshness: D★ 10Claude Code +9 - 0.475score
riverpod-migration
serverpod
Migrate Riverpod from StateNotifier to Notifier/AsyncNotifier, from ChangeNotifier to AsyncNotifier, or upgrade from 0.13/0.14/1.0; ref.onDispose, family…
SkillDFreshness: D★ 10Claude Code +9
Signals
- Stars
- 10
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Mar 7, 2026 (7 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- BSD-3-Clause
- Repository
- github.com/serverpod/skills-registry
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from serverpod
- 0.475score
riverpod-auto-dispose
serverpod
Enable automatic disposal of Riverpod providers when they have no listeners; keepAlive, onDispose, invalidate, ref.keepAlive.
SkillDFreshness: D★ 10Claude Code +9 - 0.475score
riverpod-codegen-and-hooks
serverpod
Use Riverpod code generation (@riverpod, riverpod_generator) and hooks (hooks_riverpod, HookConsumerWidget, flutter_hooks with Riverpod).
SkillDFreshness: D★ 10Claude Code +9 - 0.475score
riverpod-testing
serverpod
Test Riverpod providers and widgets; ProviderContainer.test, unit tests, widget tests with ProviderScope, tester.container(), mocking with overrides…
SkillDFreshness: D★ 10Claude Code +9 - 0.475score
riverpod-3-0-migration
serverpod
Migrate Riverpod from 2.0 to 3.0; automatic retry, paused listeners, legacy providers import, Ref simplification, FamilyNotifier removal, ProviderException…
SkillDFreshness: D★ 10Claude Code +9 - 0.475score
riverpod-cancel
serverpod
Cancel or debounce Riverpod async requests with ref.onDispose; cancel when user leaves the page, debounce rapid refreshes.
SkillDFreshness: D★ 10Claude Code +9 - 0.475score
riverpod-consumers
serverpod
Use Riverpod Consumer, ConsumerWidget, and ConsumerStatefulWidget to read and watch providers in widgets; WidgetRef, builder ref parameter.
SkillDFreshness: D★ 10Claude Code +9
Cite this page
riverpod-from-provider skill. Agent Mart. https://agentmart.dev/skills/serverpod-riverpod-from-provider (last updated 2026-10-24)