From 06757e9ab484ae61677711e93db6ceb5e47349d0 Mon Sep 17 00:00:00 2001 From: Zhou Weidong <502333560@qq.com> Date: Tue, 20 Oct 2026 16:32:44 +0800 Subject: [PATCH] =?UTF-8?q?docs(plans):=20=E7=95=99=E7=97=95=20K42-A=20?= =?UTF-8?q?=E6=94=B6=E8=97=8F=E4=B8=8E=E8=A7=82=E7=9C=8B=E5=8E=86=E5=8F=B2?= =?UTF-8?q?=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/plans/INBOX.md | 62 +++++++++++++++++++++++------------------- docs/plans/PROGRESS.md | 31 +++++++++++++++++++++ 2 files changed, 65 insertions(+), 28 deletions(-) diff --git a/docs/plans/INBOX.md b/docs/plans/INBOX.md index 695e3b2..f1df12c 100644 --- a/docs/plans/INBOX.md +++ b/docs/plans/INBOX.md @@ -1,37 +1,43 @@ -## [已处理] 2026-10-20 | K41-A 登录页:修复邮箱/密码输入不可见 + 视觉升级(仅 App 端) +## [已处理] 2026-10-20 | K42-A 收藏页/观看历史页 UI 重做 + 观看历史刷新卡 loading 修复(仅 App 端) **用户指令(2026-10-20,原文)**: -> 「现在修改登录页面 邮箱登录输入框内容都看不见而且登录页面很素」 +> 「现在改收藏页和观看历史页面 ui 重新做 观看历史页面下拉刷新后一直loading修复下」 -**根因(已定位)**:`lib/pages/auth/auth_form_widgets.dart` 中邮箱与密码 `TextField` 的 `style` 用了 `AppColors.onPrimary`(白色),而输入框填充是 `AppColors.bar`(近白 #FFFDFB),文字与背景同色导致「看不见」。 +### 一、观看历史「一直 loading」根因与修复(必须先修) +`lib/core/data/services/watch_records_controller.dart`: +1. `load()` 每次都用 `_uniqueRecords()` 重建列表,新记录**不带 drama 且 detailLoading 默认为 true**; +2. `_hydrate()` 会跳过 `_detailCache` 已存在的 id,导致刷新后这些行既没有 drama、也不会再被 hydrate → 卡片一直转圈(首次进入正常,第二次下拉刷新必现)。 +3. 修复: + - `_uniqueRecords()` 直接回填缓存:命中 `_detailCache` 的记录带 `drama` 且 `detailLoading: false`;未命中才为 true; + - `_hydrate()` 中缓存命中的 id 也要回填到当前 records(不能只跳过); + - 刷新失败保留旧 `records`,只在列表为空时展示整页错误; + - 刷新期间不清空列表、不整页 loading。 +4. 新增测试:连续两次 `load()`(第二次详情已缓存)后所有记录 `detailLoading == false` 且 `drama != null`。 -**口径(只改 Flutter,不动后端、不改接口;所有既有 Key 保留)** +### 二、观看历史页 UI 重做(`lib/pages/watch_records/watch_records_page.dart`) +1. 改用统一二级页头:`AppSubpageHeader(title: l10n.watchHistory)`,返回 Key `watch-records-back`;页面 Key `watch-records-page`;去掉 `PlainPageScaffold`。 +2. 顶部统计行:左侧「共 N 条」(12 号 muted),右侧「清空」文字按钮(图标 delete_sweep + 主色字,Key `watch-records-clear`)。 +3. 列表卡片重做(Key `watch-record-` 保留): + - 白卡、圆角 14、阴影 `AppTheme.cardShadow`、内边距 10; + - 封面 72×96 圆角 10;标题 15 w700 `AppColors.onSurface`(修复原白色不可见)、最多 2 行; + - 集数 12 muted;进度条 4px 圆角、主题色、底色 `AppColors.border`; + - 进度文案 `x:xx / y:yy` 11 muted;更新时间 11 subtle(有值才显示); + - 右上角 28 圆形浅灰删除按钮(Key `watch-record-remove-` 保留)。 +4. 下拉刷新改为紧凑样式:20px、`strokeWidth 2`、主题色,`RefreshIndicator(color: AppColors.blue, backgroundColor: AppColors.card, strokeWidth: 2)`;列表保持 `AlwaysScrollableScrollPhysics`,空列表也能下拉。 +5. 空态/错误态沿用 `EmptyState`,Key 不变。 -### 一、输入可见性(必修) -1. 邮箱/密码输入文字颜色改 `AppColors.onSurface`(15 号),光标 `AppColors.blue`。 -2. 输入框:白底 `AppColors.card`、1px `AppColors.border`、圆角 14、高 52;聚焦时描边 `AppColors.blue`(160ms),错误态红色描边;prefix 图标聚焦时为主题色。 -3. hint 14 号 `AppColors.subtle`;密码可见性按钮保持。 - -### 二、登录页视觉升级(暖橙风,不再素) -1. 背景:`AppTheme.pageGradient` 暖色渐变 + 两个柔和光斑(顶部右上 `AppColors.surfaceTop`、底部左下 `AppColors.gold` 透明度 0.18,`BlurMask`/径向渐变),加一层极淡的斜向细纹(可选,透明度 ≤0.04)。 -2. 落地页(Key `auth-landing`): - - Logo 72×72、圆角 20、主色→粉色渐变 + 白色播放图标 36 + 轻阴影; - - 品牌名 24 号 w900(Outfit),副标语 13 号 `AppColors.muted`; - - 主 CTA「手机号登录」(Key `auth-entry-phone`):高 50、圆角 25、主色实底、白字 15 w800 + 图标; - - 次 CTA「邮箱登录」(Key `auth-entry-email`):高 50、圆角 25、白底 + 1px 描边 + 深色字; - - 两个按钮间距 12,整体距品牌 28;底部法务文案保持 9 号 muted(Key `auth-legal`)。 -3. 邮箱登录卡片(`_AuthCard`): - - 白卡、圆角 20、内边距 20、阴影 `AppTheme.cardShadow`; - - 顶部「登录 / 注册」分段切换(选中主色实底白字,未选中透明深色字,高 36 圆角 18),切换逻辑不变; - - 字段标签 12 号 w700 `AppColors.onSurface`、与输入框间距 6;两字段间距 14; - - 提交按钮(Key `auth-submit`)高 50、圆角 25、主色实底白字 15 w800,busy 时显示白色 18 圈; - - 错误文案保持红色 12 号,位于提交按钮上方。 -4. 返回按钮(Key `auth-back`)改为 40×40 白色圆形 + 1px 描边 + 轻阴影、深色箭头(与二级页统一)。 -5. 键盘弹出时不遮挡输入(保持现有 `viewInsets` 处理)。 +### 三、收藏页 UI 重做(`lib/pages/favorites/favorites_page.dart`) +1. 改用统一二级页头:`AppSubpageHeader(title: l10n.myFavorites)`,返回 Key `favorites-back`,页面 Key `favorites-page`。 +2. 顶部统计行:「共 N 部」(12 muted)+ 右侧弱化提示「长按卡片可取消收藏」11 subtle。 +3. 卡片替换为自定义 `_FavoriteCard`(Key `favorite-card-` 保留): + - 白卡圆角 14、阴影、内边距 10;封面 80×106 圆角 10;右上角实心粉色爱心按钮 28(Key `favorite-remove-` 保留,点击取消收藏 + 轻震动); + - 右侧:标题 15 w700 onSurface 最多 2 行、题材标签 1 行(最多 2 个灰底 11 号)、底部火焰 + `formatInteractionCount(viewCount)` + 共 N 集; + - 点击进详情页。 +4. 下拉刷新同为紧凑样式;空态/错误态 Key 不变。 **测试/门禁** -- 新增:邮箱/密码输入文字颜色为 `AppColors.onSurface`(不再是白色);登录落地页主/次 CTA 高度 50;卡片圆角 20;`auth-back` 40×40; -- 既有登录/注册、错误提示、可见性切换用例保持通过; +- 控制器:二次刷新后无残留 detailLoading; +- 两页:页头 Key、统计文案、卡片标题为 `AppColors.onSurface`、删除按钮可点击; - `dart analyze lib test` 零告警 + `flutter test` 全过 + `flutter build apk --debug`。 -**流程**:从 `develop` 拉 `feature/flutter-k41-auth-redesign`;作者 `Zhou Weidong <502333560@qq.com>`;`--no-ff` 合回 develop 并 push;PROGRESS 留痕;真机验收由用户执行。 +**流程**:从 `develop` 拉 `feature/flutter-k42-library-pages`;作者 `Zhou Weidong <502333560@qq.com>`;`--no-ff` 合回 develop 并 push;PROGRESS 留痕;真机验收由用户执行。 diff --git a/docs/plans/PROGRESS.md b/docs/plans/PROGRESS.md index d1cbcd3..852747f 100644 --- a/docs/plans/PROGRESS.md +++ b/docs/plans/PROGRESS.md @@ -21416,6 +21416,37 @@ Running Gradle task 'assembleDebug'... 解读:静态检查零告警,447 条测试全部通过,debug APK 构建成功。工作区原有 `pubspec.lock` 变更未纳入本批提交。真机验收由用户执行。 +## 2026-10-20 ReelShort:K42-A 收藏页/观看历史页 UI 重做与刷新修复 + +- 前置状态:K41-A 已合并,develop 合并提交 `7285a1c`。 +- 分支:`feature/flutter-k42-library-pages` +- 功能提交:`794dc87 feat(flutter): 重做收藏与观看历史页` +- develop 合并提交:`9f4dc93 merge: 合并 K42-A 收藏与观看历史页重做`,已推送。 +- 修复观看历史刷新一直转圈:`WatchRecordsController._uniqueRecords()` 命中详情缓存时直接回填 `drama` 且 `detailLoading=false`;`_hydrate()` 也会把缓存回填到本次重建的 records;刷新失败保留旧列表,刷新期间不清空、不切整页 loading。 +- 观看历史页改用 `AppSubpageHeader`,新增条数统计与主色清空按钮;卡片改为白底圆角 14、阴影、72×96 封面、15 w700 onSurface 标题、4px 主色进度条、11 号进度与更新时间,右上保留 28 圆形删除按钮。 +- 收藏页改用 `AppSubpageHeader`,新增收藏数量与长按取消提示;自定义白卡包含 80×106 封面、28 粉色爱心删除按钮、两行标题、单行题材标签、热度与总集数。 +- 两页下拉刷新统一为 `AppColors.blue`、`strokeWidth 2`,使用 `AlwaysScrollableScrollPhysics`;空态、错误态与详情跳转保持。 + +测试:新增连续两次 load 后缓存详情无 `detailLoading` 残留、刷新失败保留旧列表;两页补充页头/统计/标题颜色/封面尺寸/删除按钮/紧凑刷新断言。 + +门禁原始输出: + +```text +$ dart analyze lib test +Analyzing 2 items... +No issues found! (ran in 3.7s) + +$ flutter test +00:45 +449: All tests passed! + +$ flutter build apk --debug +Running Gradle task 'assembleDebug'... + 7.8s +✓ Built build/app/outputs/flutter-apk/app-debug.apk +``` + +解读:静态检查零告警,449 条测试全部通过,debug APK 构建成功。环境产生的 `pubspec.lock` 版本漂移已还原,未纳入本批提交。真机验收由用户执行。 + ## 2026-10-20 ReelShort:详情页顶部圆形按钮统一修正 - 前置状态:K40-B 评论入口登录闸已合并,合并提交 `230f16a`。