fix: add ToastStyle enum and currentStyle property to ToastService

This commit is contained in:
Developer
2026-04-08 01:51:02 +08:00
parent b9a39ed2f1
commit c009b030ce
210 changed files with 17129 additions and 5 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,301 @@
# 全面重构设计方案
## 概述
本设计文档描述了对 Mom's Kitchen 项目进行全面重构的方案,包括:
1. GetX 全局状态管理
2. 组件使用 PageStandards
3. 路由守卫系统
4. 组件复用方案
---
## 一、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<T>:**
- 继承 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 设计原则
1. **所有组件必须使用 PageStandards**
- 颜色使用 `standards.primaryColor`
- 字体使用 `standards.textStyle`
- 尺寸使用 `standards.scaledWidth()`
2. **支持多语言**
- 通过 `standards.l10n` 获取翻译
3. **支持深色模式**
- 自动跟随主题变化
### 2.3 标准按钮组件
**StandardButton:**
- 支持 4 种类型primary、secondary、outline、text
- 支持加载状态
- 支持图标
- 支持全宽
---
## 三、路由守卫系统
### 3.1 认证级别
```dart
enum AuthLevel {
none, // 无需认证
optional, // 可选认证
required // 必须认证
}
```
### 3.2 RouteGuard 类
**功能:**
- `canAccess()` - 检查是否可以访问
- `getRedirectRoute()` - 获取重定向路由
**使用方式:**
- 在 PageInfo 的 metadata 中设置 `authLevel`
- 在 GetPage 中调用 RouteGuard 进行验证
### 3.3 集成方式
```dart
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 第一阶段:基础架构
1. 创建 controllers/base/ 目录
2. 实现 BaseController
3. 实现 PagedController
### 5.2 第二阶段:控制器迁移
1. 创建 HomeController
2. 创建 CartController
3. 创建 ProfileController
4. 重构现有页面使用控制器
### 5.3 第三阶段:组件重构
1. 创建 widgets/base/ 目录
2. 实现 StandardButton
3. 实现 StandardTextField
4. 实现 StandardCard
5. 实现 StandardListTile
6. 重构 ProductCard
### 5.4 第四阶段:状态组件
1. 重构 LoadingIndicator
2. 实现 EmptyState
3. 实现 ErrorState
4. 重构 SkeletonLoader
### 5.5 第五阶段:交互组件
1. 实现 StandardDialog
2. 实现 StandardBottomSheet
3. 实现 StandardPicker
### 5.6 第六阶段:路由守卫
1. 实现 RouteGuard
2. 更新 PageInfo
3. 更新 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` | 更新日志 |
---
## 七、验收标准
1. ✅ 所有页面使用 GetX 状态管理
2. ✅ 所有组件使用 PageStandards
3. ✅ 路由守卫正常工作
4. ✅ 组件可复用
5. ✅ 代码分析无错误
6. ✅ 深色模式正常切换
7. ✅ 多语言正常工作
---
**创建时间:** 2026-04-08
**作者:** AI Assistant