# 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. ⏳ 全面测试

---

**状态**: 准备就绪，等待开始重构
**建议**: 采用渐进式重构，降低风险
