界面已本地化;技能介绍与说明文档按所选语言由 AI 自动翻译,代码、命令、路径和专业术语保留原文,以原作者文档为准。
探索技能
开发与工程 · SKILL.md

flutter-riverpod-state-management

flutter-riverpod-state-management

【开发与工程】Implement reactive state management using Riverpod 3.x with code generation in Flutter. Use when defining providers, building AsyncNotifiers, or overriding providers in tests.

独立 GitHub 快照 · 自动分类 · 以原作者文档为准

技能说明

GitHub

name: flutter-riverpod-state-management description: Implement reactive state management using Riverpod 3.x with code generation in Flutter. Use when defining providers, building AsyncNotifiers, or overriding providers in tests. metadata: triggers: files: - '_provider.dart' - '_notifier.dart' keywords: - riverpod - ProviderScope - ConsumerWidget - Notifier - AsyncValue - ref.watch - "@riverpod"

Riverpod State Management

Priority: P0 (CRITICAL)

Targets Riverpod 3.x. Notifier/AsyncNotifier codegen surface is unchanged from 2.x; Riverpod 3 adds automatic retry with backoff and pause/resume for offline — do not hand-roll retry logic that the framework already provides.

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 @riverpod annotations. Avoid manual Provider definitions.
  • Immutability: Use Freezed for 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_lint and custom_lint for cycle detection.

Anti-Patterns

  • No side-effects in provider init: Use ref.listen() in widgets instead.
  • No BuildContext in Notifiers: Never pass BuildContext into Notifier/Provider.
  • No local provider instantiation: Keep providers global; avoid dynamic creation.

Related Topics

我的收藏