riverpod
Use when working with Flutter Riverpod state management. Covers providers, consumers, refs, containers, overrides, async state, code generation, testing, and safe defaults.
What this skill does
# Flutter Riverpod State Management Use this skill when building Flutter state management with `riverpod` and `flutter_riverpod`. ## Core Rule - Use `Provider` for read-only values and dependency wiring. - Use `StateProvider` for small mutable state. - Use `FutureProvider` for one-shot async loading. - Use `StreamProvider` for reactive streams. - Use `Notifier` or `AsyncNotifier` for feature state that needs mutation methods. - Use `autoDispose` for short-lived state. - Use `family` when provider output depends on an argument. - Use `flutter_riverpod` in Flutter apps. - If you use `flutter_riverpod`, you usually do not add `riverpod` separately because the Flutter package brings it in transitively. - Current stable line is Riverpod 3.x (`riverpod` 3.2.1, `flutter_riverpod` 3.3.1). ## Decision Guide Choose Riverpod when: - you want provider-based dependency injection and reactive state in one model - state should be derived from other providers - async data is a major part of the feature - test overrides and scoped state matter - you want fewer classes than a Bloc-heavy approach Choose a different pattern when: - the feature is a tiny local state toggle and a simple widget would be enough - the logic is better expressed as an explicit event machine ## Required Project Setup For Dart-only code: - add `riverpod` For Flutter UI code: - add `flutter_riverpod` - wrap the app in `ProviderScope` - use `ConsumerWidget`, `Consumer`, or `ConsumerStatefulWidget` where `ref` is needed If code generation is used: - add `riverpod_annotation` - add `riverpod_generator` - add `build_runner` ## Implementation Pattern Prefer this structure: - providers own state, dependencies, and derived values - repositories and APIs stay outside widgets - UI reads state with `ref.watch` - UI performs imperative reads with `ref.read` - container-level overrides are used for tests, demos, and environment-specific wiring Keep providers small and composable. Keep state immutable unless the provider type is specifically meant for mutation. Keep feature logic in providers or notifiers, not in widgets. ## Lifecycle Rules - Use `autoDispose` for short-lived screens and transient queries. - Use `ref.keepAlive()` only when you want cached state to survive temporarily. - Prefer provider disposal over manual cleanup. - In tests and pure Dart code, dispose `ProviderContainer` when finished. ## UI Binding Rules Use `ConsumerWidget` when the whole widget depends on providers. Use `Consumer` when only a small subtree needs access to `ref`. Use `ConsumerStatefulWidget` when you need widget lifecycle plus `ref`. Use `select` to reduce rebuilds. Use `ProviderListener` or `ref.listen` for side effects. ## Testing Rules - Test providers through `ProviderContainer`. - Override dependencies instead of mocking provider internals. - Assert `AsyncValue` states directly for async providers. - Dispose containers in tests. ## Common Pitfalls - Do not call `ref.watch` inside callbacks; use `ref.read` there. - Do not skip `ProviderScope` at the app root. - Do not use `StateProvider` for large feature state. - Do not put business logic in widgets. - Do not rebuild the whole tree when a single field changes; use `select`. - Do not model async loading manually when `FutureProvider` or `AsyncNotifier` fits. - Do not forget provider overrides for tests and previews. ## What To Prefer In Answers When writing code or advising on design: - show the smallest working provider first - mention whether `ProviderScope` is required - mention whether the provider should be `autoDispose` or cached - mention whether a `family` is needed for arguments - include test override notes when dependencies are external - keep examples aligned with the current Riverpod docs and Flutter integration patterns - if code generation is involved, prefer matching `riverpod_annotation` / `riverpod_generator` versions from the same 3.x release line ## Minimal Reference Checklist - `ProviderScope` = app root setup - `ref.watch` = rebuild on change - `ref.read` = imperative access - `select` = narrower rebuilds - `autoDispose` = short-lived state - `family` = parameterized provider - `ProviderContainer` = test/headless container
Related in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.