Files
FruitServer/docs/plans/2026-10-19-K24.md
T

103 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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>`。