docs(plans): 留痕 K63 播放器路由暂停修复

This commit is contained in:
Zhou Weidong committed 2026-10-20 19:25:44 +08:00
1 parent 0de7436baf
commit 0f477c6b15
2 files changed
+81 -40

No files matched your search

+53 -40
View File
@@ -1,56 +1,69 @@
# INBOX
## [已处理] K62-A 提交安卓桌面图标资源改造
## [已处理] K63-A 首页 feed 跳转登录页时暂停播放
### 背景
### 现象
安卓桌面图标此前使用「奶油色底 + 前景缩到 72% + inset 16%」的自适应图标配置,与设计源图
`assets/icon/fruitshorts.png`(橙渐变 + 满版果篮 + 播放按钮)观感差距大:颜色发淡、元素偏小。
已在本机重做全部图标资源并完成真机验证(应用信息页图标完整无裁切)。
安卓端从首页 feed 点右侧「收藏 / 评论 / 喜欢」(未登录)→ 引导进入登录页 `AuthPage`,
播放器没有暂停,画面和声音继续播;返回首页后也没有恢复/续播的判定。
### 当前工作区改动(ReelShort 仓库,develop 分支,未提交)
### 根因
修改:
- `android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png`
- `android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png`
- `android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png`
- `android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png`
- `android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png`
- `android/app/src/main/res/mipmap-mdpi/ic_launcher.png`
- `android/app/src/main/res/mipmap-hdpi/ic_launcher.png`
- `android/app/src/main/res/mipmap-xhdpi/ic_launcher.png`
- `android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png`
- `android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png`
- `android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml`
暂停由 `PlaybackSession._mayPlay = _visible && !_overlayOpen && _userWantsPlay` 控制,
其中 `_visible = !_closed && _appResumed && _routeVisible`。
新增:
- `android/app/src/main/res/mipmap-mdpi/ic_launcher_background.png`
- `android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png`
- `android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png`
- `android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png`
- `android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png`
`_routeVisible` 只有这几处显式设置:`openDetail()`、`openSeriesAt()`、`showEpisodes()`、
`PlayerLogic.dispose()`、`onPageUpdated()`。登录页是普通 `Navigator.push`(
`lib/core/widgets/auth_gate.dart` → `openAuthPage`),没有任何一处通知播放器,
于是 `_routeVisible` 一直为 true,继续播放。
`ic_launcher.xml` 目标内容:
### 方案:引入全局 RouteObserver
```xml
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_launcher_background"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>
1. 新增 `lib/core/navigation/app_route_observer.dart`:
```dart
// Author: fruit.com.cn
import 'package:flutter/widgets.dart';
/// 全局页面路由观察者:供播放器在路由被覆盖时暂停。
final RouteObserver<PageRoute<dynamic>> appRouteObserver =
RouteObserver<PageRoute<dynamic>>();
```
### 任务
2. `lib/app.dart` 的 `MaterialApp` 增加 `navigatorObservers: [appRouteObserver]`。
1. 从 `develop` 拉分支 `fix/android-launcher-icon`(当前工作区改动保留,直接带入分支)。
2. 只提交上述 16 个资源文件,禁止 `git add -A`,禁止改动其它文件。
3. 提交信息:`fix(android): 按设计源图重做桌面图标资源`。
4. 门禁:`dart analyze lib test`、`flutter test`、`flutter build apk --debug` 全部通过。
5. `--no-ff` 合并回 `develop` 并 push。
6. 在 `FruitServer/docs/plans/PROGRESS.md` 留痕:分支名、commit、门禁结果。
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 留痕。
### 约束
- 全程中文;作者 `Zhou Weidong <502333560@qq.com>`。
- 不改 Dart 代码、不改其它资源。
- 全程中文;禁止 `git add -A`;不改图标、启动图等无关资源。
- 完成后停住,等待验收。