> flutter-riverpod-state-management
Implement reactive state management using Riverpod 2.0 with code generation in Flutter. Use when defining @riverpod providers, building AsyncNotifiers, overriding providers in tests, or enforcing immutable state with Freezed models. (triggers: **_provider.dart, **_notifier.dart, riverpod, ProviderScope, ConsumerWidget, Notifier, AsyncValue, ref.watch, @riverpod)
curl "https://skillshub.wtf/HoangNguyen0403/agent-skills-standard/flutter-riverpod-state-management?format=md"Riverpod State Management
Priority: P0 (CRITICAL)
Type-safe, compile-time safe reactive state management using riverpod and riverpod_generator.
Structure
lib/
├── providers/ # Global providers and services
└── features/user/
├── providers/ # Feature-specific providers
└── models/ # @freezed domain models
Provider Definition (Generator-First)
Use @riverpod annotations for all provider definitions. See implementation examples for full provider and consumer patterns.
Consuming Providers
Use ConsumerWidget with ref.watch() and AsyncValue.when() for reactive UI. See implementation examples.
Implementation Guidelines
- Generator First: Use
@riverpodannotations. Avoid manualProviderdefinitions. - Immutability: Use
Freezedfor all state models. - ref.watch(): Inside
build()to rebuild on changes. - ref.listen(): Inside
build()for side-effects (navigation, dialogs). Never in provider init. - ref.read(): ONLY in callbacks (
onPressed). - Testing: Override providers with
ProviderScope(overrides: [provider.overrideWithValue(Mock())]). - Linting: Enable
riverpod_lintandcustom_lintfor cycle detection.
Anti-Patterns
- No side-effects in provider init: Use
ref.listen()in widgets instead. - No BuildContext in Notifiers: Never pass
BuildContextinto a Notifier/Provider. - No local provider instantiation: Keep providers global; avoid dynamic creation.
Related Topics
> related_skills --same-repo
> common-store-changelog
Generate user-facing release notes for the Apple App Store and Google Play Store by collecting git history, triaging user-impacting changes, and drafting store-compliant changelogs. Enforces character limits (App Store ≤4000, Google Play ≤500), tone, and bullet format. Use when generating release notes, app store changelog, play store release, what's new, or version release notes for any mobile app. (triggers: generate changelog, app store notes, play store release, what's new, release notes, ve
> golang-tooling
Go developer toolchain — gopls LSP diagnostics, linting, formatting, and vet. Use when setting up Go tooling, running linters, or integrating gopls with Claude Code. (triggers: gopls, golangci-lint, golangci.yml, go vet, goimports, staticcheck, go tooling, go lint)
> common-ui-design
Design distinctive, production-grade frontend UI with bold aesthetic choices. Use when building web components, pages, interfaces, dashboards, or applications in any framework (React, Next.js, Angular, Vue, HTML/CSS). (triggers: build a page, create a component, design a dashboard, landing page, UI for, build a layout, make it look good, improve the design, build UI, create interface, design screen)
> common-owasp
OWASP Top 10 audit checklist for Web Applications (2021) and APIs (2023). Load during any security review, PR review, or codebase audit touching web, mobile backend, or API code. (triggers: security review, OWASP, broken access control, IDOR, BOLA, injection, broken auth, API review, authorization, access control)