用途
本技能面向 Flutter 应用开发,整理了一套以 Riverpod 为核心状态管理方案的工程实践参考,并搭配 Freezed 数据建模、go_router 路由导航与 mocktail 测试。适合希望在 Flutter 项目中统一采用这套技术组合进行结构组织、状态管理、路由与测试的开发者参考。
项目结构
文档给出了一种按职责分层的目录组织方式:lib 下分为 core(常量、扩展、router 配置、主题)、data(Freezed 模型、仓库实现、API 服务)、domain(业务实体、仓库接口)、presentation(公共 Widget、按功能拆分的 features、全局 providers),另有 main.dart 与 app.dart。测试目录分为 unit、widget、integration 三部分,并包含 pubspec.yaml、analysis_options.yaml 与 CLAUDE.md。
主要能力
Riverpod 状态管理
- 覆盖多种 Provider 类型:Provider、StateProvider、NotifierProvider、AsyncNotifierProvider、FutureProvider、StreamProvider,以及带参数的 family provider。
- 展示 Notifier 模式:通过 build 方法初始化状态,refresh 与 addUser 等方法配合 AsyncValue.guard 与 ref.invalidateSelf 更新状态。
- AsyncValue 处理:使用 when 或 Dart switch 模式匹配处理 data、loading、error 三种状态。
- ref 方法:watch、read、listen、invalidate、keepAlive 的使用场景说明。
Freezed 数据模型
- 通过 @freezed 定义不可变模型,支持 @Default 默认值与 DateTime 可空字段,并通过 fromJson 生成反序列化。
- 使用 sealed class 定义联合类型(如 AuthState 的 initial/loading/authenticated/unauthenticated/error),配合 when 做分支渲染。
go_router 导航
- 通过 Provider 提供 GoRouter 实例,结合 refreshListenable 与 redirect 实现基于认证状态的路由重定向。
- 支持嵌套路由、路径参数(如 /user/:id)、errorBuilder。
- 导航方式包括 go、push、pop、pushReplacement 以及 goNamed 命名路由。
Widget 模式
- 介绍 ConsumerWidget、ConsumerStatefulWidget 以及结合 flutter_hooks 的 HookConsumerWidget 的写法与生命周期管理(如 dispose 释放控制器)。
测试与配置
- 单元测试:使用 mocktail 的 Mock 与 when/verify,搭配 ProviderContainer 的 overrides 注入模拟仓库。
- Widget 测试:通过 ProviderScope 的 overrides 覆盖 provider,测试数据与加载状态。
- 文档附有 pubspec.yaml 依赖清单(flutter_riverpod、riverpod_annotation、freezed_annotation、json_annotation、go_router、dio、shared_preferences、intl 及对应 dev 依赖)、GitHub Actions 的 Flutter CI 流程(安装依赖、代码生成、analyze、test、构建 APK)以及 analysis_options.yaml 的严格类型检查与 lint 规则。
适用场景
适用于采用 Flutter 构建跨平台应用,并希望统一使用 Riverpod + Freezed + go_router + mocktail 技术栈进行分层架构、状态管理、路由与测试的团队或个人项目。
限制
文档未说明具体支持的 Flutter / Dart 版本范围以外的兼容性、各依赖包的确切行为差异,也未提供性能、收费或平台支持方面的信息;以上内容暂未提供。运行时需以实际依赖版本与官方文档为准。