307 lines
7.4 KiB
Markdown
307 lines
7.4 KiB
Markdown
|
|
# 应用新设计系统到 Flutter 项目
|
|||
|
|
|
|||
|
|
You are running a development task using the **monisuo-dev skill** workflow.
|
|||
|
|
|
|||
|
|
## 背景
|
|||
|
|
|
|||
|
|
我们已经完成了 Monisuo 项目的现代化改造,现在需要应用一套全新的设计系统,包括:
|
|||
|
|
- Material Design 3 配色方案
|
|||
|
|
- Space Grotesk + Manrope 字体组合
|
|||
|
|
- Glass Panel 和 Neon Glow 效果
|
|||
|
|
- 组件化开发
|
|||
|
|
|
|||
|
|
## 参考文件
|
|||
|
|
|
|||
|
|
- **Feature Spec**: `docs/features/apply-new-styles.md` (必读)
|
|||
|
|
- **样式参考**:
|
|||
|
|
- `页面样式/交易.txt` - 交易页面完整样式
|
|||
|
|
- `页面样式/行情.txt` - 行情页面完整样式
|
|||
|
|
- `页面样式/我的.txt` - 我的页面完整样式
|
|||
|
|
- `页面样式/充值弹窗.txt` - 充值弹窗样式
|
|||
|
|
- `页面样式/提现弹窗.txt` - 提现弹窗样式
|
|||
|
|
|
|||
|
|
## 任务要求
|
|||
|
|
|
|||
|
|
### ✅ 必须遵守
|
|||
|
|
1. **不破坏现有 API 接口** - 所有接口调用保持不变
|
|||
|
|
2. **不修改业务逻辑** - 只更新 UI/UX
|
|||
|
|
3. **不修改数据模型** - Model 类保持不变
|
|||
|
|
4. **渐进式更新** - 分步骤更新,避免大规模重构
|
|||
|
|
|
|||
|
|
### 🎯 核心任务
|
|||
|
|
|
|||
|
|
#### Phase 1: 创建设计系统和基础组件 (2小时)
|
|||
|
|
|
|||
|
|
1. **更新颜色系统** (`lib/core/theme/app_color_scheme.dart`)
|
|||
|
|
- 添加 Material Design 3 颜色
|
|||
|
|
- Primary: #72dcff (青色)
|
|||
|
|
- Secondary: #dd8bfb (紫色)
|
|||
|
|
- Tertiary: #afffd1 (绿色)
|
|||
|
|
- Error: #ff716c (红色)
|
|||
|
|
- Surface 系列: #0b0e14, #161a21, #1c2028, #22262f
|
|||
|
|
|
|||
|
|
2. **更新字体系统** (`lib/core/theme/app_theme.dart`)
|
|||
|
|
- 添加 Google Fonts 依赖
|
|||
|
|
- Space Grotesk (标题)
|
|||
|
|
- Manrope (正文)
|
|||
|
|
- 配置 TextTheme
|
|||
|
|
|
|||
|
|
3. **创建 GlassPanel 组件** (`lib/ui/components/glass_panel.dart`)
|
|||
|
|
```dart
|
|||
|
|
class GlassPanel extends StatelessWidget {
|
|||
|
|
final Widget child;
|
|||
|
|
final double blur;
|
|||
|
|
final Color? backgroundColor;
|
|||
|
|
final BorderRadius? borderRadius;
|
|||
|
|
|
|||
|
|
// 实现毛玻璃效果
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
4. **创建 NeonGlow 组件** (`lib/ui/components/neon_glow.dart`)
|
|||
|
|
```dart
|
|||
|
|
class NeonGlow extends StatelessWidget {
|
|||
|
|
final Widget child;
|
|||
|
|
final Color glowColor;
|
|||
|
|
final double blurRadius;
|
|||
|
|
|
|||
|
|
// 实现霓虹光效
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### Phase 2: 更新页面样式 (3小时)
|
|||
|
|
|
|||
|
|
5. **更新交易页面** (`lib/ui/pages/trade/trade_page.dart`)
|
|||
|
|
- 应用新的颜色系统
|
|||
|
|
- 使用 GlassPanel 组件
|
|||
|
|
- 添加 NeonGlow 效果
|
|||
|
|
- 保持现有 API 调用不变
|
|||
|
|
|
|||
|
|
6. **更新行情页面** (`lib/ui/pages/market/market_page.dart`)
|
|||
|
|
- 应用新的卡片样式
|
|||
|
|
- 使用新的颜色系统
|
|||
|
|
- 保持现有列表逻辑
|
|||
|
|
|
|||
|
|
7. **更新我的页面** (`lib/ui/pages/mine/mine_page.dart`)
|
|||
|
|
- 应用新的卡片样式
|
|||
|
|
- 使用新的颜色系统
|
|||
|
|
- 保持现有功能
|
|||
|
|
|
|||
|
|
8. **更新充值弹窗** (`lib/ui/pages/asset/asset_page.dart`)
|
|||
|
|
- 应用新的弹窗样式
|
|||
|
|
- 使用 GlassPanel
|
|||
|
|
- 保持现有逻辑
|
|||
|
|
|
|||
|
|
9. **更新提现弹窗** (`lib/ui/pages/asset/asset_page.dart`)
|
|||
|
|
- 应用新的弹窗样式
|
|||
|
|
- 使用 GlassPanel
|
|||
|
|
- 保持现有逻辑
|
|||
|
|
|
|||
|
|
#### Phase 3: 测试和优化 (1小时)
|
|||
|
|
|
|||
|
|
10. **运行 Flutter Analyze**
|
|||
|
|
```bash
|
|||
|
|
cd flutter_monisuo
|
|||
|
|
flutter analyze
|
|||
|
|
```
|
|||
|
|
- 确保 0 errors
|
|||
|
|
- 修复 warnings
|
|||
|
|
|
|||
|
|
11. **测试应用**
|
|||
|
|
```bash
|
|||
|
|
flutter run -d chrome
|
|||
|
|
```
|
|||
|
|
- 测试所有页面显示正常
|
|||
|
|
- 测试主题切换功能
|
|||
|
|
- 验证 API 调用正常
|
|||
|
|
|
|||
|
|
12. **优化性能**
|
|||
|
|
- 检查毛玻璃效果性能
|
|||
|
|
- 优化不必要的重建
|
|||
|
|
- 确保流畅度
|
|||
|
|
|
|||
|
|
#### Phase 4: 构建和部署 (0.5小时)
|
|||
|
|
|
|||
|
|
13. **构建生产版本**
|
|||
|
|
```bash
|
|||
|
|
flutter build web --release --dart-define=ENV=prod
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
14. **提交代码**
|
|||
|
|
```bash
|
|||
|
|
git add .
|
|||
|
|
git commit -m "feat(ui): 应用新设计系统
|
|||
|
|
|
|||
|
|
- 更新颜色系统为 Material Design 3
|
|||
|
|
- 添加 Space Grotesk 和 Manrope 字体
|
|||
|
|
- 创建 GlassPanel 和 NeonGlow 组件
|
|||
|
|
- 更新所有页面样式
|
|||
|
|
- 保持现有 API 接口不变"
|
|||
|
|
|
|||
|
|
git push
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 设计系统详情
|
|||
|
|
|
|||
|
|
### 颜色系统 (Material Design 3)
|
|||
|
|
|
|||
|
|
```dart
|
|||
|
|
// Primary (青色)
|
|||
|
|
primary: #72dcff
|
|||
|
|
primaryDim: #00c3ed
|
|||
|
|
primaryContainer: #00d2ff
|
|||
|
|
|
|||
|
|
// Secondary (紫色)
|
|||
|
|
secondary: #dd8bfb
|
|||
|
|
secondaryDim: #ce7eec
|
|||
|
|
secondaryContainer: #6e208c
|
|||
|
|
|
|||
|
|
// Tertiary (绿色)
|
|||
|
|
tertiary: #afffd1
|
|||
|
|
tertiaryDim: #00efa0
|
|||
|
|
tertiaryContainer: #00ffab
|
|||
|
|
|
|||
|
|
// Error (红色)
|
|||
|
|
error: #ff716c
|
|||
|
|
errorDim: #d7383b
|
|||
|
|
errorContainer: #9f0519
|
|||
|
|
|
|||
|
|
// Surface (深色背景)
|
|||
|
|
background: #0b0e14
|
|||
|
|
surface: #0b0e14
|
|||
|
|
surfaceDim: #0b0e14
|
|||
|
|
surfaceBright: #282c36
|
|||
|
|
surfaceContainerLowest: #000000
|
|||
|
|
surfaceContainerLow: #10131a
|
|||
|
|
surfaceContainer: #161a21
|
|||
|
|
surfaceContainerHigh: #1c2028
|
|||
|
|
surfaceContainerHighest: #22262f
|
|||
|
|
|
|||
|
|
// On Surface (文字)
|
|||
|
|
onSurface: #ecedf6
|
|||
|
|
onSurfaceVariant: #a9abb3
|
|||
|
|
outline: #73757d
|
|||
|
|
outlineVariant: #45484f
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 字体系统
|
|||
|
|
|
|||
|
|
```dart
|
|||
|
|
// Headline (标题)
|
|||
|
|
fontFamily: Space Grotesk
|
|||
|
|
fontWeight: 300-700
|
|||
|
|
|
|||
|
|
// Body (正文)
|
|||
|
|
fontFamily: Manrope
|
|||
|
|
fontWeight: 300-700
|
|||
|
|
|
|||
|
|
// Label (标签)
|
|||
|
|
fontFamily: Manrope
|
|||
|
|
fontWeight: 500-700
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 组件样式
|
|||
|
|
|
|||
|
|
#### GlassPanel (毛玻璃效果)
|
|||
|
|
```css
|
|||
|
|
background: rgba(34, 38, 47, 0.4)
|
|||
|
|
backdrop-filter: blur(20px)
|
|||
|
|
border: 1px solid rgba(69, 72, 79, 0.15)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### NeonGlow (霓虹光效)
|
|||
|
|
```css
|
|||
|
|
/* Primary Glow */
|
|||
|
|
box-shadow: 0 0 20px rgba(114, 220, 255, 0.15)
|
|||
|
|
|
|||
|
|
/* Secondary Glow */
|
|||
|
|
box-shadow: 0 0 20px rgba(221, 139, 251, 0.15)
|
|||
|
|
|
|||
|
|
/* Tertiary Glow */
|
|||
|
|
box-shadow: 0 0 25px rgba(175, 255, 209, 0.2)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 执行规则
|
|||
|
|
|
|||
|
|
1. **严格遵循 Phase 顺序** - 不要跳跃
|
|||
|
|
2. **增量提交** - 每完成一个 Phase 就提交
|
|||
|
|
3. **保持兼容性** - 不破坏现有功能
|
|||
|
|
4. **测试验证** - 每个阶段都要测试
|
|||
|
|
5. **文档更新** - 更新 CHANGELOG
|
|||
|
|
|
|||
|
|
## 完成标准
|
|||
|
|
|
|||
|
|
当所有任务完成时:
|
|||
|
|
- ✅ 所有页面使用新设计系统
|
|||
|
|
- ✅ **深色主题样式完整**
|
|||
|
|
- ✅ **亮色主题样式完整**
|
|||
|
|
- ✅ **主题切换功能正常**
|
|||
|
|
- ✅ flutter analyze 0 errors
|
|||
|
|
- ✅ 应用运行正常
|
|||
|
|
- ✅ API 调用正常
|
|||
|
|
- ✅ 代码已提交
|
|||
|
|
|
|||
|
|
### ⚠️ 重要提示:必须支持明暗主题
|
|||
|
|
|
|||
|
|
**深色主题 (Dark Theme)**
|
|||
|
|
- 背景:深色 (#0b0e14, #161a21)
|
|||
|
|
- 文字:亮色 (#ecedf6, #a9abb3)
|
|||
|
|
- GlassPanel:深色半透明
|
|||
|
|
- NeonGlow:明亮效果
|
|||
|
|
|
|||
|
|
**亮色主题 (Light Theme)**
|
|||
|
|
- 背景:浅色 (#FFFFFF, #FAFAFA)
|
|||
|
|
- 文字:深色 (#0b0e14, #161a21)
|
|||
|
|
- GlassPanel:浅色半透明
|
|||
|
|
- NeonGlow:柔和效果
|
|||
|
|
|
|||
|
|
**实现方式**:
|
|||
|
|
- 在 `app_color_scheme.dart` 中定义 `lightShad` 和 `darkShad`
|
|||
|
|
- 在 `app_theme.dart` 中定义 `lightTheme` 和 `darkTheme`
|
|||
|
|
- 使用 `ThemeProvider` (已存在) 进行主题切换
|
|||
|
|
- 所有组件必须响应主题变化
|
|||
|
|
|
|||
|
|
### ⚠️ 重要提示:必须使用中文
|
|||
|
|
|
|||
|
|
**所有UI文字必须使用中文**:
|
|||
|
|
- ✅ 按钮文字:Buy → 买入,Sell → 卖出
|
|||
|
|
- ✅ 标签文字:Price → 价格,Amount → 数量
|
|||
|
|
- ✅ 提示文字:Available → 可用,Fee → 手续费
|
|||
|
|
- ✅ 页面标题:Trade → 交易,Market → 行情,Assets → 资产
|
|||
|
|
- ✅ 弹窗标题:Deposit → 充值,Withdraw → 提现
|
|||
|
|
- ✅ 状态文字:Completed → 已完成,Pending → 待处理
|
|||
|
|
|
|||
|
|
**参考翻译**:
|
|||
|
|
```
|
|||
|
|
Trade → 交易
|
|||
|
|
Market → 行情
|
|||
|
|
Assets → 资产
|
|||
|
|
Profile → 我的
|
|||
|
|
Buy → 买入
|
|||
|
|
Sell → 卖出
|
|||
|
|
Price → 价格
|
|||
|
|
Amount → 数量
|
|||
|
|
Total → 总计
|
|||
|
|
Fee → 手续费
|
|||
|
|
Available → 可用
|
|||
|
|
Balance → 余额
|
|||
|
|
Deposit → 充值
|
|||
|
|
Withdraw → 提现
|
|||
|
|
Order → 订单
|
|||
|
|
History → 历史
|
|||
|
|
Search → 搜索
|
|||
|
|
All → 全部
|
|||
|
|
Hot → 热门
|
|||
|
|
Favorites → 收藏
|
|||
|
|
Real-time → 实时
|
|||
|
|
24h High → 24小时最高
|
|||
|
|
24h Low → 24小时最低
|
|||
|
|
24h Vol → 24小时成交量
|
|||
|
|
Place Buy Order → 下买单
|
|||
|
|
Place Sell Order → 下卖单
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**开始执行吧!让 Monisuo 拥有最现代化的 UI!** 🚀✨
|