7.1 KiB
7.1 KiB
全面重构设计方案
概述
本设计文档描述了对 Cute Kitchen 项目进行全面重构的方案,包括:
- GetX 全局状态管理
- 组件使用 PageStandards
- 路由守卫系统
- 组件复用方案
一、GetX 全局状态管理
1.1 架构设计
lib/src/controllers/
├── base/
│ ├── base_controller.dart # 基础控制器
│ └── paged_controller.dart # 分页控制器
├── home_controller.dart # 首页控制器
├── cart_controller.dart # 购物车控制器
├── profile_controller.dart # 个人中心控制器
└── app_controller.dart # 应用全局控制器
1.2 基础控制器
BaseController:
- 提供
isLoading状态 - 提供
errorMessage状态 - 提供
runWithLoading()方法封装异步操作
PagedController:
- 继承 BaseController
- 提供
items列表 - 提供
currentPage当前页码 - 提供
hasMore是否有更多数据 - 提供
loadMore()加载更多 - 提供
refresh()刷新数据
1.3 页面控制器
HomeController:
- 管理产品列表
- 管理分类列表
- 管理搜索和筛选状态
CartController:
- 管理购物车商品
- 计算总价
- 添加/删除商品
ProfileController:
- 管理用户信息
- 处理登录/登出
1.4 页面使用方式
- 使用
Get.put()注册控制器 - 使用
Obx()或GetBuilder监听状态变化 - 使用
Get.find()获取控制器实例
二、组件使用 PageStandards
2.1 组件库结构
lib/src/widgets/
├── base/
│ ├── standard_button.dart # 标准按钮
│ ├── standard_text_field.dart # 标准输入框
│ ├── standard_card.dart # 标准卡片
│ └── standard_list_tile.dart # 标准列表项
├── interactive/
│ ├── standard_dialog.dart # 标准对话框
│ ├── standard_bottom_sheet.dart # 标准底部弹窗
│ └── standard_picker.dart # 标准选择器
├── states/
│ ├── loading_indicator.dart # 加载指示器
│ ├── empty_state.dart # 空状态
│ ├── error_state.dart # 错误状态
│ └── skeleton_loader.dart # 骨架屏
└── product_card.dart # 产品卡片(重构)
2.2 设计原则
-
所有组件必须使用 PageStandards
- 颜色使用
standards.primaryColor等 - 字体使用
standards.textStyle等 - 尺寸使用
standards.scaledWidth()等
- 颜色使用
-
支持多语言
- 通过
standards.l10n获取翻译
- 通过
-
支持深色模式
- 自动跟随主题变化
2.3 标准按钮组件
StandardButton:
- 支持 4 种类型:primary、secondary、outline、text
- 支持加载状态
- 支持图标
- 支持全宽
三、路由守卫系统
3.1 认证级别
enum AuthLevel {
none, // 无需认证
optional, // 可选认证
required // 必须认证
}
3.2 RouteGuard 类
功能:
canAccess()- 检查是否可以访问getRedirectRoute()- 获取重定向路由
使用方式:
- 在 PageInfo 的 metadata 中设置
authLevel - 在 GetPage 中调用 RouteGuard 进行验证
3.3 集成方式
GetPage(
name: '/profile',
page: () {
final redirect = RouteGuard.getRedirectRoute('/profile', user: currentUser);
if (redirect != null) {
return LoginPage();
}
return const ProfilePage();
},
),
四、组件复用方案
4.1 状态组件
LoadingIndicator:
- 显示加载动画
- 支持自定义大小和颜色
EmptyState:
- 显示空状态提示
- 支持自定义图标、标题、消息
- 支持操作按钮
ErrorState:
- 显示错误信息
- 支持重试按钮
4.2 交互组件
StandardDialog:
- 标准对话框
- 支持确认/取消按钮
- 提供静态
show()方法
StandardBottomSheet:
- 标准底部弹窗
- 支持自定义内容
StandardPicker:
- 标准选择器
- 支持单选/多选
4.3 基础组件
StandardButton:
- 标准按钮
- 支持 4 种样式
StandardTextField:
- 标准输入框
- 支持验证
StandardCard:
- 标准卡片
- 支持点击事件
StandardListTile:
- 标准列表项
- 支持图标、标题、副标题
五、实施计划
5.1 第一阶段:基础架构
- 创建 controllers/base/ 目录
- 实现 BaseController
- 实现 PagedController
5.2 第二阶段:控制器迁移
- 创建 HomeController
- 创建 CartController
- 创建 ProfileController
- 重构现有页面使用控制器
5.3 第三阶段:组件重构
- 创建 widgets/base/ 目录
- 实现 StandardButton
- 实现 StandardTextField
- 实现 StandardCard
- 实现 StandardListTile
- 重构 ProductCard
5.4 第四阶段:状态组件
- 重构 LoadingIndicator
- 实现 EmptyState
- 实现 ErrorState
- 重构 SkeletonLoader
5.5 第五阶段:交互组件
- 实现 StandardDialog
- 实现 StandardBottomSheet
- 实现 StandardPicker
5.6 第六阶段:路由守卫
- 实现 RouteGuard
- 更新 PageInfo
- 更新 main.dart
六、文件清单
新增文件
| 文件路径 | 说明 |
|---|---|
lib/src/controllers/base/base_controller.dart |
基础控制器 |
lib/src/controllers/base/paged_controller.dart |
分页控制器 |
lib/src/controllers/home_controller.dart |
首页控制器 |
lib/src/controllers/cart_controller.dart |
购物车控制器 |
lib/src/controllers/profile_controller.dart |
个人中心控制器 |
lib/src/controllers/app_controller.dart |
应用全局控制器 |
lib/src/widgets/base/standard_button.dart |
标准按钮 |
lib/src/widgets/base/standard_text_field.dart |
标准输入框 |
lib/src/widgets/base/standard_card.dart |
标准卡片 |
lib/src/widgets/base/standard_list_tile.dart |
标准列表项 |
lib/src/widgets/interactive/standard_dialog.dart |
标准对话框 |
lib/src/widgets/interactive/standard_bottom_sheet.dart |
标准底部弹窗 |
lib/src/widgets/interactive/standard_picker.dart |
标准选择器 |
lib/src/widgets/states/empty_state.dart |
空状态 |
lib/src/widgets/states/error_state.dart |
错误状态 |
lib/src/standards/route_guard.dart |
路由守卫 |
修改文件
| 文件路径 | 修改内容 |
|---|---|
lib/src/pages/home_page.dart |
使用 HomeController |
lib/src/pages/example_page.dart |
使用 PageStandards |
lib/src/pages/theme_demo_page.dart |
使用控制器 |
lib/src/widgets/product_card.dart |
使用 PageStandards |
lib/src/widgets/loading_indicator.dart |
使用 PageStandards |
lib/src/widgets/skeleton_loader.dart |
使用 PageStandards |
lib/src/standards/app_pages.dart |
添加 authLevel |
lib/main.dart |
集成路由守卫 |
CHANGELOG.md |
更新日志 |
七、验收标准
- ✅ 所有页面使用 GetX 状态管理
- ✅ 所有组件使用 PageStandards
- ✅ 路由守卫正常工作
- ✅ 组件可复用
- ✅ 代码分析无错误
- ✅ 深色模式正常切换
- ✅ 多语言正常工作
创建时间: 2026-04-08 作者: AI Assistant