From e50e6c7170b415ce6edda59b2ae91b33c0050483 Mon Sep 17 00:00:00 2001 From: Zhou Weidong <502333560@qq.com> Date: Tue, 20 Oct 2026 17:54:52 +0800 Subject: [PATCH] =?UTF-8?q?docs(plans):=20=E7=95=99=E7=97=95=20K53=20?= =?UTF-8?q?=E8=AF=A6=E6=83=85=E9=A1=B5=E9=A6=96=E5=B8=A7=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/plans/INBOX.md | 30 +++++++++++++++++------------- docs/plans/PROGRESS.md | 28 ++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 13 deletions(-) diff --git a/docs/plans/INBOX.md b/docs/plans/INBOX.md index 7336462..78e41ba 100644 --- a/docs/plans/INBOX.md +++ b/docs/plans/INBOX.md @@ -1,20 +1,24 @@ -## [已处理] 2026-10-20 | K52-A 去掉原生静态开屏,直接进入带动画的开屏页(仅 App 端) +## [已处理] 2026-10-20 | K53-A 详情页首帧直出内容,去掉「先空白背景再出内容」(仅 App 端) **用户指令(2026-10-20,原文)**: -> 「原生的开屏也就不要了 直接显示带动画效果的开屏页即可」 +> 「现在从首页的短剧标题点进去仍然会闪屏 先显示详情页背景色 然后才显示内容 还是没有修改好」 -**口径(只改 Flutter / 原生启动资源,不动后端、不改接口)** -1. Android 原生开屏只保留纯色底: - - `android/app/src/main/res/drawable/launch_background.xml`、`drawable-v21/launch_background.xml`、`drawable-v31/launch_background.xml` 全部改为仅 `@color/splash_background`(去掉 bitmap / splash_icon 图层); - - `values-v31/styles.xml` 与 `values-night-v31/styles.xml`:`windowSplashScreenAnimatedIcon` 改为透明 drawable(新增 `drawable/splash_transparent.xml`,``),移除 `windowSplashScreenIconBackgroundColor`; - - `splash_background` 保持 `#100C0A`,与 Flutter 动画开屏背景一致,避免色差。 -2. iOS 原生开屏去掉静态图: - - `ios/Runner/Base.lproj/LaunchScreen.storyboard` 删除 `LaunchImage` imageView 及其 constraints,仅保留深色背景(现 rgb 0.0627/0.0470/0.0392)。 -3. Flutter 动画开屏页保持 K50-A 的动画(logo 放大淡入 → FruitShorts → 水果短剧 → 转圈),作为用户看到的第一个画面;原生只做纯色过渡。 -4. 不再引用 `drawable-*/splash_icon.png` 与 iOS `LaunchImage`(文件可保留,但不得出现在启动界面)。 +**根因(已定位)** +`drama_detail_view.dart` 的 `_page()` 第一行是 `if (logic.loading) return _loading(l10n);`:即便是从首页卡片进入(标题、封面、简介、数据都已具备),详情接口未返回前整页被替换成「ink 背景 + AppBar + 转圈」的空白页;接口返回后才渲染真正内容 → 表现为「先闪一下底色,再出内容」。 + +**口径(只改 Flutter,不动后端、不改接口)** +1. 首帧直出:`_page()` 不再因 `logic.loading` 整页 loading;直接用 `logic.drama`(初始即传入的卡片数据)渲染 Header / 数据卡 / 简介 / 标签。 +2. 选集区按需加载: + - `drama.episodes.isEmpty && logic.loading` → 选集区显示 6 个骨架格(1:1 圆角块 + 轻微呼吸),Key `detail-episodes-loading`; + - 详情失败 → 选集区显示「加载失败 + 重试」,Key `detail-episodes-retry`,页面其它内容不受影响; + - 详情成功 → 正常渲染选集网格。 +3. 仅当传入卡片本身没有可用内容(标题与封面都为空)时,才允许整页 loading/失败页;现有 `detail-error` 等 Key 保留给该场景。 +4. 底部 CTA 在选集未加载时禁用(灰态)并显示 `startWatching`,详情到达后恢复可点。 +5. 不改 `openDetail` 的跳转方式(K51-A 已改)。 **测试/门禁** -- 静态检查:三个 `launch_background.xml` 不再包含 bitmap;v31 styles 不含 `windowSplashScreenIconBackgroundColor`;LaunchScreen.storyboard 不含 `LaunchImage`; +- 新增:进入详情页首帧即可看到 `detail-title`、`detail-poster`、`detail-stats`,且不存在整页 `CircularProgressIndicator`; +- 详情加载中选集区显示 `detail-episodes-loading`;失败显示 `detail-episodes-retry` 且标题仍在; - `dart analyze lib test` 零告警 + `flutter test` 全过 + `flutter build apk --debug`。 -**流程**:从 `develop` 拉 `feature/flutter-k52-native-splash-clean`;作者 `Zhou Weidong <502333560@qq.com>`;`--no-ff` 合回 develop 并 push;PROGRESS 留痕;真机验收由用户执行(冷启动应看到纯深色 → Flutter 动画开屏)。 +**流程**:从 `develop` 拉 `fix/flutter-k53-detail-first-frame`;作者 `Zhou Weidong <502333560@qq.com>`;`--no-ff` 合回 develop 并 push;PROGRESS 留痕;真机验收由用户执行。 diff --git a/docs/plans/PROGRESS.md b/docs/plans/PROGRESS.md index e8814e3..cd4e2f4 100644 --- a/docs/plans/PROGRESS.md +++ b/docs/plans/PROGRESS.md @@ -21860,6 +21860,34 @@ Running Gradle task 'assembleDebug'... 解读:静态检查零告警,458 条测试全部通过,debug APK 构建成功。冷启动应从深色原生底直接过渡到 Flutter 动画开屏,最终效果由用户真机验收。 +## 2026-10-20 ReelShort:K53-A 详情页首帧直出 + +- 前置状态:K52-A 已完成并合并,develop 合并提交 `a11ba50`。 +- 分支:`fix/flutter-k53-detail-first-frame` +- 功能提交:`bb92996 fix(flutter): 修复详情页首帧闪屏` +- develop 合并提交:`2305957 merge: 合并 K53 详情页首帧修复`,已推送。 +- 删除 `logic.loading` 时整页 loading 的短路:只要传入卡片已有标题或封面,首帧立即渲染 Header、数据卡、简介与标签;只有标题和封面同时为空时才保留整页 loading/failed。 +- 选集区独立展示状态:无剧集且加载中显示 6 个呼吸骨架格 `detail-episodes-loading`;接口失败显示 `detail-episodes-retry`,上方卡片内容保持可见;成功后切换完整选集网格。 +- 完整选集未就绪时底部 CTA 使用灰色禁用态,加载成功后恢复可点击;新增独立测试文件覆盖首帧直出、骨架、失败保留标题和 CTA 状态。 + +门禁原始输出: + +```text +$ dart analyze lib test +Analyzing lib, test... +No issues found! + +$ flutter test +00:48 +460: All tests passed! + +$ flutter build apk --debug +Running Gradle task 'assembleDebug'... + 21.8s +✓ Built build/app/outputs/flutter-apk/app-debug.apk +``` + +解读:静态检查零告警,460 条测试全部通过,debug APK 构建成功。本机 Flutter 自动改写的 `pubspec.lock` 已恢复,未纳入提交。详情页首帧与选集加载体验由用户真机验收。 + ## 2026-10-20 ReelShort:详情页顶部圆形按钮统一修正 - 前置状态:K40-B 评论入口登录闸已合并,合并提交 `230f16a`。