From f6ce79c65a736fc54523d99c86a4065177de56b7 Mon Sep 17 00:00:00 2001 From: Zhou Weidong <502333560@qq.com> Date: Tue, 20 Oct 2026 19:42:45 +0800 Subject: [PATCH] =?UTF-8?q?docs(plans):=20=E7=95=99=E7=97=95=20K64=20?= =?UTF-8?q?=E5=8E=9F=E7=94=9F=E5=93=81=E7=89=8C=E5=90=AF=E5=8A=A8=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/plans/INBOX.md | 98 +++++++++++++++++++----------------------- docs/plans/PROGRESS.md | 28 ++++++++++++ 2 files changed, 72 insertions(+), 54 deletions(-) diff --git a/docs/plans/INBOX.md b/docs/plans/INBOX.md index 99b7882..18611c5 100644 --- a/docs/plans/INBOX.md +++ b/docs/plans/INBOX.md @@ -1,69 +1,59 @@ # INBOX -## [已处理] K63-A 首页 feed 跳转登录页时暂停播放 +## [已处理] K64-A 原生开屏改为品牌启动图 -### 现象 +### 背景 -安卓端从首页 feed 点右侧「收藏 / 评论 / 喜欢」(未登录)→ 引导进入登录页 `AuthPage`, -播放器没有暂停,画面和声音继续播;返回首页后也没有恢复/续播的判定。 +自定义 Flutter 动画开屏页观感不佳(元素多、文字不够亮)。按产品要求改为**只保留原生启动屏**: -### 根因 +- 深暖底 `#1F1B16` 上一枚果篮图标 + 明亮奶油白 `FruitShorts` + 橙色「水果短剧」 +- 原生启动屏由 `flutter_native_splash` 生成,Android 12+ 用 `android12splash`,旧版本用 `splash`, + iOS 用 `LaunchImage` / `LaunchBackground` +- 删除自定义开屏页,首页首帧加载态改为同款深底 + 主题色转圈,避免深→浅闪白 -暂停由 `PlaybackSession._mayPlay = _visible && !_overlayOpen && _userWantsPlay` 控制, -其中 `_visible = !_closed && _appResumed && _routeVisible`。 +已完成本机实现与真机验证(Android 16 录屏逐帧确认:开屏 → 加载 → feed 全程深色,无白闪)。 +门禁已由 Trae 复跑:`dart analyze lib test` 零告警、`flutter test` 473 条全过、`flutter build apk --debug` 成功。 -`_routeVisible` 只有这几处显式设置:`openDetail()`、`openSeriesAt()`、`showEpisodes()`、 -`PlayerLogic.dispose()`、`onPageUpdated()`。登录页是普通 `Navigator.push`( -`lib/core/widgets/auth_gate.dart` → `openAuthPage`),没有任何一处通知播放器, -于是 `_routeVisible` 一直为 true,继续播放。 +### 工作区改动(ReelShort,develop,未提交) -### 方案:引入全局 RouteObserver +新增: +- `assets/icon/splash_logo.png` +- `assets/icon/splash_logo_android12.png` +- `android/app/src/main/res/drawable/background.png` +- `android/app/src/main/res/drawable-v21/background.png` +- `android/app/src/main/res/drawable-{mdpi,hdpi,xhdpi,xxhdpi,xxxhdpi}/splash.png` +- `android/app/src/main/res/drawable-{mdpi,hdpi,xhdpi,xxhdpi,xxxhdpi}/android12splash.png` +- `android/app/src/main/res/drawable-night-{mdpi,hdpi,xhdpi,xxhdpi,xxxhdpi}/android12splash.png` +- `ios/Runner/Assets.xcassets/LaunchImage.imageset/` +- `ios/Runner/Assets.xcassets/LaunchBackground.imageset/` -1. 新增 `lib/core/navigation/app_route_observer.dart`: +修改: +- `pubspec.yaml`(移除 `splash_mark.png` 资产声明,`flutter_native_splash` 配置改为深底 + 新图) +- `lib/core/theme/app_colors.dart`(新增 `splashInk = #1F1B16`) +- `lib/pages/home/home_view.dart`(删除 `SplashPage` 分支;加载态改深底 + 浅色状态栏) +- `android/app/src/main/res/drawable/launch_background.xml` +- `android/app/src/main/res/drawable-v21/launch_background.xml` +- `android/app/src/main/res/values/colors.xml` +- `android/app/src/main/res/values-v31/styles.xml` +- `android/app/src/main/res/values-night-v31/styles.xml` +- `ios/Runner/Base.lproj/LaunchScreen.storyboard` -```dart -// Author: fruit.com.cn +删除: +- `assets/icon/splash_mark.png` +- `lib/pages/splash/splash_page.dart` +- `test/splash/splash_gate_test.dart` -import 'package:flutter/widgets.dart'; +### 任务 -/// 全局页面路由观察者:供播放器在路由被覆盖时暂停。 -final RouteObserver> appRouteObserver = - RouteObserver>(); -``` - -2. `lib/app.dart` 的 `MaterialApp` 增加 `navigatorObservers: [appRouteObserver]`。 - -3. `lib/pages/player/player_view.dart` 的 `_PlayerPageState` 混入 `RouteAware`: - - `didChangeDependencies()`:`final route = ModalRoute.of(context);` - 若 `route is PageRoute` 且尚未订阅,则 `appRouteObserver.subscribe(this, route)`(防重复订阅) - - `dispose()`:`appRouteObserver.unsubscribe(this)` - - `didPushNext()`:调 `logic.onRouteCovered()` - - `didPopNext()`:调 `logic.onRouteRevealed()` - -4. `PlayerLogic` 新增两个方法(放在 `onLifecycle` 附近): - - `void onRouteCovered()`:`session.setRouteVisible(false); cancelScrub(); unawaited(saveCurrentProgress());` - - `void onRouteRevealed()`:`if (isMounted()) session.setRouteVisible(active);` - 与 `openDetail()` / `openSeriesAt()` 已有的显式设置重复时同值,不应产生抖动。 - -5. 覆盖场景验收: - - 首页 feed 未登录点收藏 / 评论 / 喜欢 → 进登录页:暂停;返回:恢复播放 - - 首页 feed → 详情页(仍走 `openDetail` 的 overlay 逻辑):暂停 / 返回恢复 - - 全屏播放页 → 登录页:暂停 / 返回恢复 - - 首页 feed 打开选集弹层(PopupRoute):行为不变,仍由 `setOverlayOpen` 控制 - -### 测试要求 - -- `test/player/` 下补充用例:push 一个 `PageRoute` 后 `session` 不可播放、pop 后恢复; - 首页 feed 进 `AuthPage` 暂停(可用 `RouteObserver` + 测试路由验证)。 -- 门禁:`dart analyze lib test` 零告警、`flutter test` 全过、`flutter build apk --debug` 成功。 - -### Git - -- 从 `develop` 拉 `fix/player-pause-on-route`。 -- 提交:`fix(player): 路由覆盖时暂停播放`,作者 `Zhou Weidong <502333560@qq.com>`。 -- `--no-ff` 合回 `develop` 并 push;`FruitServer/docs/plans/PROGRESS.md` 追加 K63-A 留痕。 +1. 从 `develop` 拉分支 `feat/native-splash-logo`(工作区改动直接带入)。 +2. 只提交上述文件;**禁止 `git add -A`**。 +3. **不要提交** `pubspec.lock`、`android/app/src/main/AndroidManifest.xml`、`ios/Runner/Info.plist` + (这三处已还原为 develop 原样,禁止再改动)。 +4. 提交:`feat(splash): 原生开屏改为品牌启动图`,作者 `Zhou Weidong <502333560@qq.com>`。 +5. 门禁:`dart analyze lib test`、`flutter test`、`flutter build apk --debug` 全过。 +6. `--no-ff` 合并回 `develop` 并 push。 +7. `FruitServer/docs/plans/PROGRESS.md` 追加 K64-A 留痕(分支、commit、门禁原始输出)。 ### 约束 -- 全程中文;禁止 `git add -A`;不改图标、启动图等无关资源。 -- 完成后停住,等待验收。 +- 全程中文;不改其它功能代码;完成后停住,等待验收。 diff --git a/docs/plans/PROGRESS.md b/docs/plans/PROGRESS.md index c4e8599..9e48703 100644 --- a/docs/plans/PROGRESS.md +++ b/docs/plans/PROGRESS.md @@ -22303,3 +22303,31 @@ Running Gradle task 'assembleDebug'... ``` 解读:静态检查零告警,444 条测试全部通过,debug APK 构建成功。工作区原有 `pubspec.lock` 变更未纳入本批提交。真机验收由用户执行。 + +## 2026-10-20 ReelShort:K64-A 原生开屏改为品牌启动图 + +- 前置状态:K63-A 已完成并合并,develop 合并提交 `210ccc9`。 +- 分支:`feat/native-splash-logo` +- 功能提交:`8f60046 feat(splash): 原生开屏改为品牌启动图` +- develop 合并提交:`1199db7 merge: 合并 K64-A 原生品牌启动图`,已推送。 +- 使用 `flutter_native_splash` 生成 Android 旧版 `splash`、Android 12+ `android12splash` 日/夜资源及 iOS `LaunchImage` / `LaunchBackground`,原生背景统一为深暖底 `#1F1B16`。 +- 删除 Flutter 自定义 `SplashPage` 与对应测试,首页首帧加载态改为同色深底、浅色状态栏和主题色转圈,避免原生开屏到首页之间闪白。 +- 本次精确提交 37 个任务文件,未提交 `pubspec.lock`、`AndroidManifest.xml`、`Info.plist`;门禁产生的 lock 漂移已还原。 + +门禁原始输出: + +```text +$ dart analyze lib test +Analyzing lib, test... +No issues found! + +$ flutter test +01:01 +473: All tests passed! + +$ flutter build apk --debug +Running Gradle task 'assembleDebug'... +2,498ms +✓ Built build/app/outputs/flutter-apk/app-debug.apk +``` + +解读:静态检查零告警,473 条测试全部通过,debug APK 构建成功。真机验收由用户执行。