Files
monisuo/REFACTOR_PLAN.md

360 lines
7.3 KiB
Markdown
Raw Normal View History

# Monisuo 前端重构计划 - 使用 shadcn_ui
**创建时间**: 2026-03-22 02:20
**状态**: ⏳ 进行中
---
## ✅ 已完成
### 1. 依赖安装
- ✅ shadcn_ui 0.2.6 已安装
- ✅ flutter_animate 已安装
- ✅ lucide_icons_flutter 已安装
### 2. 技能文档
- ✅ 全局技能:`~/.agents/skills/shadcn-ui-flutter/`
- ✅ 项目技能:`~/.agent/skills/shadcn-ui-flutter/`
### 3. 主应用配置
-`main.dart` 已更新为 ShadApp
- ✅ 主题配置完成(深色模式 + Slate 配色)
---
## 🔄 重构计划
### 阶段 1: 核心页面重构(优先)
#### 1.1 主页面
-`main_page_shadcn.dart` - 已创建
- ⏳ 替换原来的 `main_page.dart`
#### 1.2 登录/注册页面
-`login_page_shadcn.dart` - 已创建示例
- ⏳ 创建 `register_page_shadcn.dart`
- ⏳ 完整表单验证
#### 1.3 首页home_page.dart
需要重构的内容:
- 使用 ShadCard 替换 Material Card
- 使用 ShadButton 替换 ElevatedButton
- 使用 LucideIcons 替换 Material Icons
- 使用 ShadTheme 获取主题
#### 1.4 行情页面market_page.dart
需要重构的内容:
- 币种列表使用 ShadCard
- 价格显示使用 shadcn 文本样式
- 搜索框使用 ShadInput
#### 1.5 交易页面trade_page.dart
需要重构的内容:
- 买入/卖出使用 ShadButton
- 数量输入使用 ShadInputFormField
- 币种选择使用 ShadSelect
#### 1.6 资产页面asset_page.dart
需要重构的内容:
- 资产卡片使用 ShadCard
- 充值/提现按钮使用 ShadButton
- 资金列表优化
#### 1.7 个人中心mine_page.dart
需要重构的内容:
- 菜单项使用 shadcn 样式
- 设置项使用 ShadSwitch
- 退出登录使用 ShadButton
---
### 阶段 2: 组件优化
#### 2.1 自定义组件
创建项目特定的 shadcn 组件:
**CoinCard** - 币种卡片
```dart
class CoinCard extends StatelessWidget {
final String name;
final String code;
final double price;
final double change24h;
@override
Widget build(BuildContext context) {
return ShadCard(
child: Row(
children: [
ShadAvatar(coinIcon),
Column(
children: [
Text(name, style: ShadTheme.of(context).textTheme.large),
Text(code, style: ShadTheme.of(context).textTheme.muted),
],
),
Spacer(),
Column(
children: [
Text('\$$price', style: ShadTheme.of(context).textTheme.large),
ShadBadge(
child: Text('$change24h%'),
),
],
),
],
),
);
}
}
```
**TradeButton** - 交易按钮
```dart
class TradeButton extends StatelessWidget {
final bool isBuy;
final VoidCallback onPressed;
@override
Widget build(BuildContext context) {
return ShadButton(
backgroundColor: isBuy ? Colors.green : Colors.red,
child: Text(isBuy ? '买入' : '卖出'),
onPressed: onPressed,
);
}
}
```
**AssetCard** - 资产卡片
```dart
class AssetCard extends StatelessWidget {
final String title;
final double balance;
final double change;
@override
Widget build(BuildContext context) {
return ShadCard(
title: Text(title),
child: Column(
children: [
Text('\$$balance', style: ShadTheme.of(context).textTheme.h2),
Text('$change%', style: ShadTheme.of(context).textTheme.muted),
],
),
);
}
}
```
---
### 阶段 3: 高级功能
#### 3.1 表单管理
使用 ShadForm 重构所有表单:
- 登录表单
- 注册表单
- 交易表单
- 充值/提现表单
#### 3.2 对话框
使用 ShadDialog 替换所有对话框:
- 确认对话框
- 错误提示
- 成功提示
#### 3.3 动画
使用 flutter_animate 添加动画:
- 页面切换动画
- 列表加载动画
- 按钮点击动画
---
## 📋 重构检查清单
### 必须替换的组件
- [ ] `MaterialApp``ShadApp.custom`
- [ ] `Scaffold` → 保持使用
- [ ] `AppBar` → 自定义 AppBar
- [ ] `ElevatedButton``ShadButton`
- [ ] `TextButton``ShadButton.link`
- [ ] `OutlinedButton``ShadButton.outline`
- [ ] `TextField``ShadInputFormField`
- [ ] `Card``ShadCard`
- [ ] `Icon(Icons.xxx)``Icon(LucideIcons.xxx)`
### 样式迁移
- [ ] `Theme.of(context)``ShadTheme.of(context)`
- [ ] `Colors.xxx``ShadTheme.of(context).colorScheme.xxx`
- [ ] `TextStyle``ShadTheme.of(context).textTheme.xxx`
---
## 🎯 重构步骤
### 步骤 1: 替换主入口
```bash
# 1. 备份原文件
cp lib/main.dart lib/main_backup.dart
# 2. 使用新版本(已完成)
# main.dart 已更新为使用 ShadApp
```
### 步骤 2: 逐页重构
```bash
# 按优先级重构
1. login_page.dart # 登录页(已完成示例)
2. main_page.dart # 主页(已完成示例)
3. home_page.dart # 首页
4. market_page.dart # 行情
5. trade_page.dart # 交易
6. asset_page.dart # 资产
7. mine_page.dart # 我的
```
### 步骤 3: 组件优化
```bash
# 创建自定义组件
1. CoinCard - 币种卡片
2. TradeButton - 交易按钮
3. AssetCard - 资产卡片
4. PriceChart - 价格图表
```
### 步骤 4: 测试验证
```bash
# 测试所有功能
1. 用户登录/注册
2. 查看行情
3. 进行交易
4. 查看资产
5. 个人设置
```
---
## 🎨 主题定制
### 当前主题配置
```dart
ShadThemeData(
brightness: Brightness.dark,
colorScheme: const ShadSlateColorScheme.dark(),
)
```
### 可选配色方案
- **Slate**(当前):专业、稳重
- **Zinc**:现代、简洁
- **Blue**:活力、信任
- **Green**:财富、增长
- **Violet**:创新、独特
### 自定义品牌色
```dart
ShadThemeData(
colorScheme: const ShadSlateColorScheme.dark(
custom: {
'brand': Color(0xFF00D4AA), # 品牌绿
'up': Color(0xFF10B981), # 涨
'down': Color(0xFFEF4444), # 跌
},
),
)
```
---
## 📊 预期效果
### 视觉改进
- ✅ 更现代的设计风格
- ✅ 统一的视觉语言
- ✅ 更好的深色模式支持
- ✅ 流畅的动画效果
### 用户体验改进
- ✅ 更清晰的视觉层次
- ✅ 更好的交互反馈
- ✅ 更快的加载动画
- ✅ 更直观的表单验证
### 代码质量改进
- ✅ 更少的样板代码
- ✅ 更好的组件复用
- ✅ 更容易的主题切换
- ✅ 更简单的表单管理
---
## 🚀 快速开始
### 方式 1: 渐进式重构(推荐)
```bash
# 1. 保持现有页面运行
# 2. 逐个页面重构
# 3. 测试通过后替换原文件
```
### 方式 2: 完全重构
```bash
# 1. 重构所有页面
# 2. 全面测试
# 3. 一次性发布
```
---
## 📝 重构示例
### Before (Material)
```dart
ElevatedButton(
child: Text('登录'),
style: ElevatedButton.styleFrom(
backgroundColor: AppColors.primary,
),
onPressed: () {},
)
```
### After (shadcn_ui)
```dart
ShadButton(
child: Text('登录'),
onPressed: () {},
)
```
---
## ⏱️ 预计时间
- **阶段 1**核心页面2-3 小时
- **阶段 2**组件优化1-2 小时
- **阶段 3**高级功能1-2 小时
- **测试验证**1 小时
**总计**5-8 小时
---
## 🎯 下一步
1. ✅ 确认依赖已安装
2. ⏳ 选择重构方式(渐进式推荐)
3. ⏳ 开始重构首页
4. ⏳ 逐步完成其他页面
5. ⏳ 全面测试
---
**状态**: 准备就绪,等待开始重构
**建议**: 采用渐进式重构,降低风险