103 lines
4.4 KiB
Markdown
103 lines
4.4 KiB
Markdown
# K24 计划:客户端 UI 对齐设计稿
|
||
|
||
日期:2026-10-19
|
||
客户端基线:`ReelShort/develop` = `b1c69e2`
|
||
文档基线:`FruitServer/develop` = `93b2299`
|
||
分支:`feature/flutter-k24-design-system`
|
||
|
||
## 一、范围
|
||
|
||
本批只做设计系统、3 Tab 底部导航、首页沉浸层、发现页:
|
||
|
||
- 设计 token:Obsidian Flare 色板、字体、间距/圆角、玻璃面板。
|
||
- 底部导航:Home / Discover / Me 三项;My List 不再独立成 Tab,内容并入 Me 页。
|
||
- 首页:保留 `PlayerPage(homeMode: true)` 播放链路,只替换叠加层与信息卡。
|
||
- 发现页:品牌行、搜索、分类 chips、Continue Watching、4 个快捷入口、2 列 Trending。
|
||
|
||
不做:详情页、播放器、我的页、登录页的视觉重做(K25/K26);后端、Web、specs、main。
|
||
|
||
## 二、设计口径
|
||
|
||
权威来源:`docs/design/README.md` + `screens/01-home.html` + `screens/02-discover.html`。
|
||
不采用 `DESIGN.md` 顶部 YAML 的 `#ffb4a5/#cdbdff`。
|
||
|
||
| 语义 | 值 |
|
||
| --- | --- |
|
||
| background / ink / bar | `#0B0C10` |
|
||
| card | `#16181F` |
|
||
| surface-elevated / raised | `#1D1E28` |
|
||
| primary / blue | `#FF5B3D` |
|
||
| pressed / bluePressed | `#FF4321` |
|
||
| secondary / lavender / blueSoft | `#9278EA` |
|
||
| gold | `#FBBF24` |
|
||
| success | `#34D399` |
|
||
| on-surface | `#FFFFFF` / `#E3E2E8` |
|
||
| muted | `#A1A1AA` |
|
||
| subtle | `#71717A` |
|
||
| border | `rgba(255,255,255,0.08)` |
|
||
|
||
字体:Outfit(标题)、Plus Jakarta Sans(正文),OFL TTF 本地打包,不运行时联网。
|
||
下载失败时保留系统字体,并在回执与 PROGRESS 标注未完成项。
|
||
|
||
## 三、TDD 顺序
|
||
|
||
1. 设计 token / 主题:先更新 `test/theme/app_theme_test.dart` 期望值与新增 token 断言,再改
|
||
`app_colors.dart`、`app_theme.dart`、`app_dimens.dart`。
|
||
2. GlassPanel:先写组件测试(blur、渐变、描边、圆角),再实现 `glass_panel.dart`。
|
||
3. 3 Tab:先改导航测试为 `tab-home/tab-discover/tab-my`,覆盖选中态、映射、沉浸隐藏;
|
||
再改 `app_bottom_nav.dart` 与 `home_view.dart`。
|
||
4. 首页:先用现有 Player 测试保证播放/进度/收藏不回归,再新增首页结构断言
|
||
(剧名、HOT、右侧互动栏、底部玻璃卡、Follow Series、Episodes)。
|
||
5. 发现页:先写搜索过滤、2 列网格、Continue Watching 隐藏/显示测试,再改
|
||
`discover_view.dart` / `discover_logic.dart` / `home_drama_grid.dart`。
|
||
6. 回归:更新 4 Tab 与轮播挂载相关断言,保留播放、进度、收藏、举报等行为测试。
|
||
|
||
## 四、影响文件
|
||
|
||
- `lib/core/theme/app_colors.dart`
|
||
- `lib/core/theme/app_theme.dart`
|
||
- `lib/core/theme/app_dimens.dart`
|
||
- `lib/core/widgets/glass_panel.dart`(新增)
|
||
- `lib/core/widgets/app_bottom_nav.dart`
|
||
- `lib/pages/home/home_view.dart`
|
||
- `lib/pages/home/home_logic.dart`
|
||
- `lib/pages/discover/discover_view.dart`
|
||
- `lib/pages/discover/discover_logic.dart`
|
||
- `lib/pages/discover/widgets/home_drama_grid.dart`
|
||
- `lib/pages/player/player_view.dart`(仅 homeMode 叠加层)
|
||
- `lib/pages/mine/mine_view.dart`(仅把 My List 区块并入 Me)
|
||
- `pubspec.yaml`、`assets/fonts/*`
|
||
- 相关 `test/**`
|
||
|
||
## 五、数据缺口与降级
|
||
|
||
| 设计字段 | 现有数据 | 处理 |
|
||
| --- | --- | --- |
|
||
| 评分 | `Drama` 无评分字段 | 隐藏,不伪造 |
|
||
| 完结状态 | 无完结字段 | 隐藏 |
|
||
| 榜单名次 | 无字段 | 用 `isHot` + `viewCount` 排序展示,不编名次 |
|
||
| VIP 徽章 | 无 VIP 字段;`Episode.locked` 仅集级 | 列表不显示 VIP 徽章 |
|
||
| Free 徽章 | `freeEpisodes` 仅详情接口 | 有值才显示 |
|
||
| 点赞/评论数 | 互动接口无剧级计数 | 只显示图标或文案,不编数字 |
|
||
| Continue Watching 集数/剩余时长 | `WatchProgress` 有位置/时长,无集号 | 有记录才显示,集号缺失时省略 |
|
||
|
||
## 六、风险
|
||
|
||
- 首页叠加层改动可能影响沉浸模式、PiP、下载入口与既有 tooltip;通过保留原有行为入口并跑
|
||
`test/widget_test.dart`、`test/home/**`、`test/player/**` 控制风险。
|
||
- 3 Tab 合并会触碰多个导航测试;只调整 Tab 数量/Key 断言,不改播放与收藏断言。
|
||
- 新字体增加安装包体积;只打包 Regular/SemiBold/Bold 必要字重。
|
||
- 发现页数据源仍用 `CategoryController.visibleDramas`,不新增接口。
|
||
|
||
## 七、门禁
|
||
|
||
```bash
|
||
flutter pub get
|
||
dart analyze lib test
|
||
flutter test
|
||
flutter build apk --debug
|
||
```
|
||
|
||
提交作者/提交者:`Zhou Weidong <502333560@qq.com>`。
|
||
|