Compare commits
3
Commits
131f0c4e06
...
f6187df51a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f6187df51a | ||
|
|
34357846f4 | ||
|
|
810d9fc2dc |
No files matched your search
@@ -0,0 +1,60 @@
|
||||
# 2026-10-19 K20 客户端视觉统一
|
||||
|
||||
## 基线
|
||||
|
||||
- ReelShort `develop`: `42ce1d1`
|
||||
- FruitServer `develop`: `810d9fc`
|
||||
- 只改 ReelShort 视觉与布局;不改业务逻辑、接口、后端、Web、specs、main。
|
||||
- 保留辣椒红 `AppColors.blue = #C4322A`。
|
||||
|
||||
## 统一 Token
|
||||
|
||||
新增 `lib/core/theme/app_dimens.dart`:
|
||||
|
||||
| Token | 值 |
|
||||
| --- | --- |
|
||||
| 页面左右边距 | 16 |
|
||||
| 卡片圆角 / 内边距 | 16 / 16 |
|
||||
| 内嵌块圆角 / 内边距 | 12 / 12 |
|
||||
| 胶囊圆角 | 20 |
|
||||
| caption / body / list / section / page | 12 / 14 / 15 / 16 / 20 |
|
||||
| 导航标签 | 11 |
|
||||
| 详情主标题 | 24 |
|
||||
| 主按钮高度 | 48;整页主操作 52 |
|
||||
| 点击区 | 44 × 44 |
|
||||
| 导航高度 / 图标 | 64 / 22 |
|
||||
| 进度条高度 / 圆角 | 4 / 4 |
|
||||
| 账号卡高度 / 图标 / 标签 | 64 / 18 / 11 |
|
||||
| 观看占位高度 | 114 |
|
||||
|
||||
## 改造顺序
|
||||
|
||||
1. 加 token 与主题:`AppDimens`、`AppColors.favorite`、深色唯一口径、
|
||||
按钮最小高度、OutlinedButton 主题、AppBar/状态栏样式。
|
||||
2. 新增 `AppBottomNav` / `AppBottomNavItem`,替换 home/discover/mine/player fallback。
|
||||
3. 调整账号入口卡为 64 高、18 图标、11 标签、44 点击区,并回归 K19 首屏测试。
|
||||
4. 收敛字号下限:业务文案 ≥12,导航 11;清理 9.5/10。
|
||||
5. 收敛卡片圆角与间距:页面 16、卡片 16/12、区块 16/12。
|
||||
6. 替换任务书列出的硬编码颜色;收藏红心使用 `AppColors.favorite`。
|
||||
7. 统一详情、记录、下载进度条为 4 高、4 圆角、blueSoft/white24;播放器拖动条保持金色。
|
||||
8. 统一页面/区块/列表标题层级与按钮高度,移除 mine 按钮 VisualDensity.compact。
|
||||
9. 详情加载/失败分支补返回 AppBar,封面顶部加黑色渐变,详情边距 24→16。
|
||||
10. 点赞/收藏选中态改实心图标;分类和 my tabs 补 selected 语义。
|
||||
11. HeaderPill / LoginButton / 分类 Chip 点击区补到 44。
|
||||
12. 列表页底部安全区补齐;观看记录占位高度 114,与真实卡片 padding 一致。
|
||||
|
||||
## 测试与门禁
|
||||
|
||||
- 新增 `AppDimens` token 测试与 `AppBottomNav` 组件测试。
|
||||
- 不修改既有测试断言;视觉布局变化导致测试失败时改实现。
|
||||
- `dart analyze lib test`
|
||||
- `flutter test`
|
||||
- `flutter build apk --debug`
|
||||
|
||||
## 风险与边界
|
||||
|
||||
- 账号卡升高到 64 可能重新挤压“我的”页首屏;必须保持 K19 语言设置和观看历史入口测试通过。
|
||||
- 保留页面级深色 Theme 包装以降低大范围回归风险,但根 `themeMode` 必须固定 `dark`。
|
||||
- 不碰 K21 范围:搜索、Android 返回键、播放器切票黑屏、登录后续操作、下拉刷新、
|
||||
注销状态闭环、日期/时长格式、语言上送。
|
||||
- 真机验收由用户执行,本批不提供设备侧截图或日志。
|
||||
@@ -20,6 +20,124 @@
|
||||
|
||||
---
|
||||
|
||||
## [已处理·待用户验收] 2026-10-19 | K20 客户端视觉统一(辣椒红主题)
|
||||
|
||||
**用户指令(2026-10-19)**:「保留辣椒红,先做 K20 视觉统一」。
|
||||
> 只改客户端 `ReelShort` 的视觉与布局;不改业务逻辑、接口调用、后端、Web、specs、main。
|
||||
> 主题口径已拍板:**保留现有辣椒红暖色**(`AppColors.blue = #C4322A`),不恢复克莱因蓝。
|
||||
|
||||
### 一、目标
|
||||
|
||||
消除跨页面视觉不一致与明显不合理的紧凑布局,统一颜色、字号、间距、圆角、导航、卡片、按钮与进度条;
|
||||
不改任何接口行为,不改既有测试断言。
|
||||
|
||||
### 二、统一 token(新增 `lib/core/theme/app_dimens.dart`)
|
||||
|
||||
- 页面左右边距:`16`(详情页 24 → 16;Auth 20 → 16)。
|
||||
- 卡片:外层圆角 `16`、内边距 `16`;列表内嵌小块圆角 `12`、内边距 `12`;胶囊圆角 `20`。
|
||||
- 字号档位:caption `12`、body `14`、列表标题 `15`、区块标题 `16`、页面标题 `20`(w800);
|
||||
导航标签 `11`。**禁止再出现 9.5 / 10px 的业务文案**。
|
||||
- 主按钮最小高度 `48`(整页主操作 `52`);点击区不小于 `44×44`。
|
||||
- 主色只用 `AppColors`;新增 `AppColors.favorite`(收藏红心)如需保留粉色。
|
||||
|
||||
### 三、改造项(按文件)
|
||||
|
||||
1. **底部导航合一**:新增 `lib/core/widgets/app_bottom_nav.dart`,参数化 tab(图标/文案/选中);
|
||||
高 `64`、图标 `22`、标签 `11`、选中态用主色胶囊(以现有 `home_view.dart` 为基准)。
|
||||
替换 `home_view.dart`、`discover_view.dart`、`mine_view.dart` 三处导航;
|
||||
`player_view.dart` 的 `_fallbackNav` 若保留也必须复用该组件。**保留现有 Key**(`tab-home` 等)与文案。
|
||||
2. **账号入口卡重做**:`account_entry_card.dart` 高度 48 → `64`,图标 `16` → `18`,标签 `9.5` → `11`,
|
||||
允许 2 行;四个入口点击区高度 ≥44;保留 `mine-account-card`、`mine-account-profile/devices/export/deactivate` 五个 Key。
|
||||
3. **字号下限**:把 `home_drama_grid.dart:146`、`mine_view.dart:144/648/912`、`discover_view.dart:369`、
|
||||
`home_view.dart:364`、`comment_tile.dart:114`、`watch_records_page.dart:282/296`、
|
||||
`notices_page.dart:244/260`、`mine_view.dart:591`、`account_devices_page.dart:204` 提升到 ≥12(导航标签 11)。
|
||||
4. **卡片/间距收敛**:`downloads_page.dart:305`(10)、`library_drama_tile.dart:26`、
|
||||
`notices_page.dart:217`、`watch_records_page.dart:230`、`downloads_page.dart:200`、
|
||||
`mine_view.dart:614/802` 统一到 12;`home_drama_grid.dart:104/109`、`mine_view.dart:377`、
|
||||
`account_devices_page.dart:115`、`account_deactivate_page.dart:93` 统一到 16;
|
||||
卡片内边距 9/14 收敛为 12/16。`drama_detail_view.dart:147/233` 的 24 → 16。
|
||||
5. **颜色收敛**:替换 `downloads_page.dart:201/222/224/370`、`watch_records_page.dart:295`、
|
||||
`mine_view.dart:143/590/637/717/743/828/835`、`favorites_page.dart:117`、
|
||||
`home_quick_drawer.dart:54/77/118/262`、`player_view.dart:792/872/879` 中的直接 `Color(0x...)`
|
||||
为最接近的 `AppColors` 常量(必要时新增 `favorite`);`account_devices_page.dart:196-203` 的
|
||||
`scheme.tertiary` 改 `AppColors.gold` 或 `blueSoft`;`drama_detail_view.dart:169` 的
|
||||
`onSurfaceVariant` 改 `AppColors.muted`。
|
||||
6. **进度条统一**:详情续看 `drama_detail_view.dart:366-373`、观看记录 `watch_records_page.dart:267-272`、
|
||||
下载 `downloads_page.dart:357-362` 统一为高 4、圆角 4、前景 `AppColors.blueSoft`、背景 `Colors.white24`;
|
||||
Player 主拖动条保留金色。
|
||||
7. **按钮与对比度**:`app_theme.dart` 增加 `filledButtonTheme.minimumSize = Size(0, 48)` 与
|
||||
`outlinedButtonTheme`(深色前景用 `AppColors.blueSoft`);`mine_view.dart:390-401` 去掉
|
||||
`VisualDensity.compact`;`empty_state.dart:150-158` 的重试色由 `scheme.primary` 改 `AppColors.blueSoft`。
|
||||
8. **标题层级**:页面标题统一 20/w800,区块 16/w700,列表 15/w600-700;
|
||||
`drama_detail_view.dart:159-164` 的 `headlineLarge` 显式改 24。
|
||||
9. **深色唯一口径**:`app.dart:221-223` 改 `themeMode: ThemeMode.dark`;移除页面级
|
||||
`Theme(data: AppTheme.dark())` 的重复包裹(保留根主题),确保日期选择器、弹窗也是深色。
|
||||
若短期内删除页面级包裹风险大,可保留包裹,但 `themeMode` 必须为 dark。
|
||||
10. **状态栏与安全区**:根 Scaffold 统一 `AnnotatedRegion<SystemUiOverlayStyle>(light)`,
|
||||
`appBarTheme.systemOverlayStyle = light`、`systemNavigationBarColor = AppColors.bar`;
|
||||
`favorites_page.dart:102`、`watch_records_page.dart:118`、`notices_page.dart:118`、
|
||||
`downloads_page.dart:96`、`account_profile_page.dart:108`、`account_devices_page.dart:93`、
|
||||
`account_export_page.dart:89`、`account_deactivate_page.dart:73` 的底部 padding
|
||||
增加 `MediaQuery.paddingOf(context).bottom`(或 `SafeArea(top: false)`)。
|
||||
11. **详情页返回与封面压暗**:`drama_detail_view.dart:80-107` 的加载/失败分支补带返回按钮的 AppBar;
|
||||
`SliverAppBar` 封面顶部加黑色渐变,保证返回/更多图标在浅色封面上可读。
|
||||
12. **选中态可见性**:`player_view.dart:834-845` 点赞/收藏选中时改实心图标
|
||||
(`Icons.favorite` / `Icons.bookmark`);`discover_view.dart:262-296` 与
|
||||
`mine_view.dart:537-564` 的选中项补 `Semantics(selected: true)`。
|
||||
13. **点击区补足**:`discover_view.dart` 的 `_HeaderPill`(403-447)、`_LoginButton`(449-469)
|
||||
最小高度 44;分类 Chip(262-296)点击区 44(视觉高度可保持 36,用透明 padding 扩大)。
|
||||
14. **列表占位对齐**:`watch_records_page.dart:208-222` 占位高度与真实卡片一致(114),并复用相同 padding。
|
||||
|
||||
### 四、明确不做(留给 K21)
|
||||
|
||||
搜索 UI、Android 返回键行为、播放器切集票据失败黑屏、登录后继续原操作、下拉刷新、注销状态闭环、
|
||||
时长/日期格式统一、语言上送后端。**本批不碰这些逻辑**。
|
||||
|
||||
### 五、约束与门禁
|
||||
|
||||
- 不改既有测试断言;视觉改动导致测试失败时改实现,不改测试(保留所有现有 Key 与文案)。
|
||||
- `dart analyze lib test` 零告警;`flutter test` 全过;`flutter build apk --debug` 通过。
|
||||
- 代码规模红线、文档注释、`// Author: fruit.com.cn` 与既有规范不变。
|
||||
- 真机验收由用户执行,Codex 不做设备侧取证。
|
||||
|
||||
### 六、Git 与回执
|
||||
|
||||
- 从干净 `develop`(基线 `42ce1d1`)拉 `feature/flutter-k20-visual`,小步提交,完成后
|
||||
`--no-ff` 合并回 develop 并 push;不动 main;作者统一 `Zhou Weidong <502333560@qq.com>`。
|
||||
- 计划文档 `FruitServer/docs/plans/2026-10-19-K20.md`;留痕写 `PROGRESS.md` 并单独提交 FruitServer develop。
|
||||
- 回执:改动清单、统一后的 token 值、测试条数与门禁原始输出、真机验收步骤(逐屏对照色/字/间距)。
|
||||
|
||||
### 七、K20 完成回执
|
||||
|
||||
- 客户端分支:`feature/flutter-k20-visual`
|
||||
- 功能末提交:`5f1df40`
|
||||
- 合并回 develop:`e44fbdf`
|
||||
- 已推送:`42ce1d1..e44fbdf develop`
|
||||
- author/committer:`Zhou Weidong <502333560@qq.com>`
|
||||
|
||||
已完成 14 项改造:统一 token、四处底部导航、账号入口卡 64 高、
|
||||
字号下限、卡片/间距、颜色、进度条、按钮高度、标题层级、深色主题、
|
||||
状态栏/安全区、详情返回与封面渐变、选中态、点击区和观看占位高度。
|
||||
|
||||
门禁:
|
||||
|
||||
```text
|
||||
$ dart analyze lib test
|
||||
No issues found!
|
||||
|
||||
$ flutter test
|
||||
00:24 +341: All tests passed!
|
||||
|
||||
$ flutter build apk --debug
|
||||
Running Gradle task 'assembleDebug'... 7.8s
|
||||
✓ Built build/app/outputs/flutter-apk/app-debug.apk
|
||||
```
|
||||
|
||||
既有测试要求的两项例外:Auth 卡圆角保持 20;EmptyState 副标题/按钮保持
|
||||
12.5/13。两者均提取为 token,未修改测试断言。
|
||||
|
||||
---
|
||||
|
||||
## [已处理·待用户验收] 2026-10-19 | K19 客户端账号中心:资料 / 设备 / 数据导出 / 注销
|
||||
|
||||
**用户指令(2026-10-19)**:「先写 K19 任务书并派单」。
|
||||
|
||||
@@ -2202,6 +2202,126 @@ $ flutter test
|
||||
|
||||
---
|
||||
|
||||
## 36. K20 客户端视觉统一
|
||||
|
||||
### 36.1 基线与计划
|
||||
|
||||
```text
|
||||
ReelShort: 42ce1d1 fix(account): 合并网络异常文案修复
|
||||
FruitServer: 810d9fc docs(plans): 下发 K20 客户端视觉统一任务
|
||||
```
|
||||
|
||||
计划先提交为 `3435784 docs(plans): 增加 K20 视觉统一实施计划`。
|
||||
客户端从干净 develop 创建 `feature/flutter-k20-visual`。
|
||||
|
||||
### 36.2 统一 Token
|
||||
|
||||
新增 `lib/core/theme/app_dimens.dart`:
|
||||
|
||||
```text
|
||||
页面边距 16
|
||||
卡片圆角/内边距 16/16
|
||||
内嵌块圆角/内边距 12/12
|
||||
胶囊圆角 20
|
||||
caption/body/list/section/page = 12/14/15/16/20
|
||||
详情标题 24
|
||||
导航标签 11
|
||||
主按钮/整页主操作 = 48/52
|
||||
点击区 44
|
||||
导航高度/图标 = 64/22
|
||||
进度条高度/圆角 = 4/4
|
||||
账号卡高度/图标/标签 = 64/18/11
|
||||
观看占位高度 114
|
||||
```
|
||||
|
||||
`AppColors.favorite = #D74A7D`;主色继续使用辣椒红 `#C4322A`。
|
||||
|
||||
### 36.3 十四项实现
|
||||
|
||||
1. 新增 `AppBottomNav` / `AppBottomNavItem`,替换 home、discover、mine、
|
||||
player fallback 四处导航;保留 `tab-home` 等既有 Key。
|
||||
2. 账号入口卡改为 64 高、18 图标、11 标签和 44 以上点击区。
|
||||
3. 清理全部 9.5/10 业务字号,任务书列出的 11 字号提升至 12。
|
||||
4. 页面边距、卡片圆角、内边距和列表间距按 token 收敛。
|
||||
5. 任务书列出的硬编码颜色替换为 `AppColors`;收藏红心使用 `favorite`。
|
||||
6. 详情、记录、下载进度条统一 4 高、4 圆角、blueSoft/white24。
|
||||
7. Filled/OutlinedButton 最小高度 48;empty 重试色改 blueSoft。
|
||||
8. 页面标题 20/w800,详情标题 24,区块与列表标题按 token。
|
||||
9. `themeMode = ThemeMode.dark`;根节点统一状态栏和系统导航栏颜色。
|
||||
10. 8 个独立列表页补底部安全区。
|
||||
11. 详情加载/失败分支补 AppBar,封面顶部加黑色渐变,边距 24→16。
|
||||
12. 点赞/收藏选中态改实心图标;分类与 my tabs 补 selected 语义。
|
||||
13. HeaderPill、LoginButton、分类 Chip 点击区补到 44。
|
||||
14. 观看记录加载占位改为 114,并复用 12 内边距。
|
||||
|
||||
### 36.4 既有断言兼容
|
||||
|
||||
首轮回归发现两项既有断言与通用 token 冲突:
|
||||
|
||||
```text
|
||||
Auth card radius expected 20, actual 16
|
||||
EmptyState subtitle expected 12.5, actual 12
|
||||
EmptyState action expected 13, actual 14
|
||||
```
|
||||
|
||||
按“不改测试断言”要求保留为显式 token 例外:
|
||||
|
||||
```text
|
||||
authCardRadius = 20
|
||||
emptyStateSubtitle = 12.5
|
||||
emptyStateAction = 13
|
||||
```
|
||||
|
||||
其余通用卡片仍为 16,正文 caption 仍为 12。
|
||||
|
||||
### 36.5 门禁
|
||||
|
||||
```text
|
||||
$ dart analyze lib test
|
||||
Analyzing lib, test...
|
||||
No issues found!
|
||||
```
|
||||
|
||||
```text
|
||||
$ flutter test
|
||||
00:24 +341: All tests passed!
|
||||
```
|
||||
|
||||
```text
|
||||
$ flutter build apk --debug
|
||||
Running Gradle task 'assembleDebug'... 7.8s
|
||||
✓ Built build/app/outputs/flutter-apk/app-debug.apk
|
||||
```
|
||||
|
||||
### 36.6 Git
|
||||
|
||||
```text
|
||||
df5fbe5 feat(ui): 增加视觉 token 与统一导航
|
||||
c5bfd00 style(ui): 统一页面字号间距与状态样式
|
||||
5f1df40 fix(ui): 保留空态既有字号口径
|
||||
e44fbdf style(ui): 合并 K20 客户端视觉统一
|
||||
42ce1d1..e44fbdf develop -> develop
|
||||
```
|
||||
|
||||
提交 author/committer 均为 `Zhou Weidong <502333560@qq.com>`。
|
||||
|
||||
### 36.7 用户真机验收
|
||||
|
||||
设备侧取证由用户执行:
|
||||
|
||||
1. 首页底部导航:检查 64 高、22 图标、11 标签、主色胶囊选中态和四个原 Key。
|
||||
2. 发现页:检查三处导航一致,分类 Chip 点击区 44、选中语义和 header 按钮高度。
|
||||
3. 我的页:检查账号卡 64 高、四入口可点,菜单/语言入口仍在首屏可用。
|
||||
4. 详情页:检查返回按钮可读、封面顶部渐变、24 标题、16 边距、进度条 4 高。
|
||||
5. 观看记录:检查加载占位 114、真实卡片 12 padding、进度条和 12 以上辅助文本。
|
||||
6. 下载页:检查策略卡、授权卡、12 圆角、进度条和安全区。
|
||||
7. 公告/收藏/账号中心:检查卡片 12/16 圆角、正文 ≥12、底部安全区。
|
||||
8. 播放器抽屉与右侧栏:检查点赞/收藏选中实心图标,fallback 导航与其他页一致。
|
||||
9. 浅色封面详情页:确认返回/更多图标因顶部黑色渐变保持可读。
|
||||
10. Android 系统栏:确认状态栏浅色图标、导航栏为 `AppColors.bar`。
|
||||
|
||||
---
|
||||
|
||||
## 35. K19 非 ApiException 网络文案修复
|
||||
|
||||
### 35.1 缺陷与修复
|
||||
|
||||
Reference in new issue
Block a user