riverpod

Riverpod

Reactive state management for Flutter

Details

Language / Topic
dartDart
Category
Libraries

Rules

balanced
- Define providers at the top level using `@riverpod` annotation or `Provider`/`StateNotifierProvider` — avoid creating providers inside widgets.
- Use `ref.watch()` in widgets to rebuild on state changes and `ref.read()` in callbacks — never `watch()` inside event handlers.
- Use `AsyncNotifier` for async state (API calls, DB queries) — it handles loading/error/data states with `AsyncValue<T>` automatically.
- Use `AsyncNotifierProvider` for async state (API calls, database). Use `NotifierProvider` for sync state.
- Use `ref.invalidate()` to reset provider state (e.g., after logout or data mutation).
- Use `provider.family` for parameterized providers: `userProvider(userId)`.
- Keep providers in separate files. Name files after the provider: `user_provider.dart`.