AgentSkillsCN

Flutter Riverpod State Management

利用代码生成技术,结合 Riverpod 2.0 实现响应式状态管理。

SKILL.md
--- frontmatter
name: Flutter Riverpod State Management
description: Reactive state management using Riverpod 2.0 with code generation.
metadata:
  labels: [flutter, state-management, riverpod, dependency-injection, reactive]
  triggers:
    files: ['**_provider.dart', '**_notifier.dart']
    keywords: [riverpod, ProviderScope, ConsumerWidget, Notifier, AsyncValue, ref.watch, @riverpod]

Riverpod State Management

Priority: P0 (CRITICAL)

Type-safe, compile-time safe reactive state management using riverpod and riverpod_generator.

Structure

text
lib/
├── providers/ # Global providers and services
└── features/user/
    ├── providers/ # Feature-specific providers
    └── models/    # @freezed domain models

Implementation Guidelines

  • Generator First: Use @riverpod annotations and riverpod_generator. Avoid manual Provider definitions.
  • Immutability: Maintain immutable states. Use Freezed for all state models.
  • Provider Methods:
    • ref.watch(): Use inside build() to rebuild on changes.
    • ref.listen(): Use for side-effects (navigation, dialogs).
    • ref.read(): Use ONLY in callbacks (onPressed).
  • Asynchronous Data: Use AsyncNotifier for complex async logic. Access data via .when() or AsyncValue pattern-matching.
  • Architecture: Enforce 3-layer separation (Data, Domain, Presentation).
  • Linting: Enable riverpod_lint and custom_lint for dependency cycle detection.

Anti-Patterns

  • Building Inside Providers: Don't perform side-effects inside provider initialization.
  • Context Access: Never pass BuildContext into a Notifier/Provider.
  • Dynamic Providers: Avoid local provider instantiation; keep them global.

Related Topics

layer-based-clean-architecture | dependency-injection | testing