Files
FruitServer/docs/plans/INBOX.md
T

3.1 KiB
Raw Blame History

INBOX

[已处理] K63-A 首页 feed 跳转登录页时暂停播放

现象

安卓端从首页 feed 点右侧「收藏 / 评论 / 喜欢」(未登录)→ 引导进入登录页 AuthPage, 播放器没有暂停,画面和声音继续播;返回首页后也没有恢复/续播的判定。

根因

暂停由 PlaybackSession._mayPlay = _visible && !_overlayOpen && _userWantsPlay 控制, 其中 _visible = !_closed && _appResumed && _routeVisible。

_routeVisible 只有这几处显式设置:openDetail()、openSeriesAt()、showEpisodes()、 PlayerLogic.dispose()、onPageUpdated()。登录页是普通 Navigator.push( lib/core/widgets/auth_gate.dart → openAuthPage),没有任何一处通知播放器, 于是 _routeVisible 一直为 true,继续播放。

方案:引入全局 RouteObserver

  1. 新增 lib/core/navigation/app_route_observer.dart:
// Author: fruit.com.cn

import 'package:flutter/widgets.dart';

/// 全局页面路由观察者:供播放器在路由被覆盖时暂停。
final RouteObserver<PageRoute<dynamic>> appRouteObserver =
    RouteObserver<PageRoute<dynamic>>();
  1. lib/app.dart 的 MaterialApp 增加 navigatorObservers: [appRouteObserver]。

  2. 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()
  3. PlayerLogic 新增两个方法(放在 onLifecycle 附近):

    • void onRouteCovered():session.setRouteVisible(false); cancelScrub(); unawaited(saveCurrentProgress());
    • void onRouteRevealed():if (isMounted()) session.setRouteVisible(active); 与 openDetail() / openSeriesAt() 已有的显式设置重复时同值,不应产生抖动。
  4. 覆盖场景验收:

    • 首页 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 留痕。

约束

  • 全程中文;禁止 git add -A;不改图标、启动图等无关资源。
  • 完成后停住,等待验收。