Files
FruitServer/docs/plans/INBOX.md
T

66 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`;不改其它播放逻辑;完成后停住等待验收。