Files
FruitServer/docs/plans/INBOX.md
T

3.2 KiB
Raw Blame History

INBOX

[已处理] K79-A 拖动进度条闪一下(加载态闪烁)修复

现象

拖动 / 点按进度条 seek 之后,进度条会闪一下:整条正常进度条被加载轨道替换一瞬,再切回来。

根因

K77-A 引入的加载态判定是「isBuffering 为 true 就切成 LoadingProgressTrack」:

  • lib/pages/player/widgets/seek_progress_bar.dart:loading = !isInitialized || isBuffering
  • lib/pages/player/widgets/home_feed_overlay_parts.dart:if (!value.isInitialized || value.isBuffering) return _loadingTrack();

seek 本身会触发播放器短暂的 buffering(几百毫秒),于是拖动过程中/松手瞬间 进度条被替换成加载轨道,表现为「闪一下」;拖动时也没有排除加载态。

修复方案

  1. 拖动期间永不显示加载态:只要处于拖动预览(_previewFraction != null / _preview != null), 一律渲染正常进度条与滑块。
  2. 缓冲态加去抖:buffering 需要持续 350ms 以上才切到加载轨道; 恢复播放 / 缓冲结束立即取消定时器并切回正常进度条。 !isInitialized(首帧没出来)仍然立即显示加载轨道,不去抖。

实现

  1. lib/pages/player/widgets/seek_progress_bar.dart
    • _SeekProgressBarState 增加:
      • Timer? _bufferTimer; bool _buffering = false;
      • 监听 widget.valueListenable(initState / didUpdateWidget 处理控制器切换 / dispose 移除)
      • 监听回调里:未初始化 → 直接置 buffering;buffering 持续 350ms 才 setState(_buffering = true); 否则取消定时器并复位
    • _buildTrack:final scrubbing = _previewFraction.value != null; final loading = !scrubbing && (!video.isInitialized || _buffering);
  2. lib/pages/player/widgets/home_feed_overlay_parts.dart _FeedProgressBarState
    • 同样的 Timer + _buffering 去抖;监听 widget.controller
    • build 里:final scrubbing = _preview != null; if (source == null || (!scrubbing && _buffering)) return _loadingTrack(); source == null(控制器都没有)仍立即显示加载轨道
    • 加载态期间不响应拖动(GestureDetector 的 onHorizontalDrag* 传 null)

测试

  • test/playback/seek_progress_bar_test.dart:
    • 原「buffering 立即出现 progress-loading」用例改为 pump(400ms) 后出现
    • 新增:pump(200ms) 时仍是 Slider(去抖生效)
    • 新增:拖动中(onChangeStart 后)即使 buffering 也不出现 progress-loading
  • 首页 feed 进度条如有相关用例,同样按去抖(>350ms)与拖动中不切加载态调整

验收

  • 门禁:dart analyze lib test 零告警、flutter test 全过、flutter build apk --debug 成功。
  • 真机自查:连续拖动进度条,进度条与滑块不再闪成加载态;真正卡顿(>350ms)仍会显示加载轨道。

Git

  • 从 develop 拉 fix/progress-scrub-flicker。
  • 提交:fix(player): 修复拖动进度条时加载态闪烁,作者 Zhou Weidong <502333560@qq.com>。
  • --no-ff 合回 develop 并 push;FruitServer/docs/plans/PROGRESS.md 追加 K79-A 留痕。

约束

  • 全程中文;禁止 git add -A;不改其它播放逻辑;完成后停住等待验收。