Skip to content

feat(播放器): 拖动进度与音量时显示取值气泡 - #50

Merged
Linecos merged 1 commit into
Linecos:mainfrom
starry688:feat/slider-drag-value
Nov 6, 2026
Merged

Linecos merged 1 commit into
Linecos:mainfrom
starry688:feat/slider-drag-value

Conversation

@starry688

Copy link
Copy Markdown
Contributor

改了什么

正在播放页的两条滑块都挂上 label,拖动时在圆点上方出一个小气泡:进度条显示指尖指到的时间(02:13),音量条显示整数百分比(45)。只在拖动期间出现(ShowValueIndicator.onDrag),松手即收。

为什么

进度条原来只有底部两行「当前 / 总时长」,拖动过程中看不出正要跳到哪儿——尤其是想从 1:20 拖到 3:40 这种。音量条更糟,120px 的小条上全凭手感。

样式照常见播放器的做法:小圆角气泡 + 底部一个小尖角指向圆点,12sp 等宽数字。等宽是刻意的——气泡跟着手指横向跑,用比例数字会让宽度一直变化、看着发抖。

影响范围

  • Rust:rust/src/api/{db,scan,player}.rs、rust/src/bass.rs
  • Flutter 界面:lib/src/features/player/now_playing_page.dart
  • 应用外壳 / 主题 / 路由
  • 构建、CI、脚本、文档

自查

  • .\scripts\check.ps1 通过(analyze 零 issue、608 条测试全过、dart format 无改动;Rust 侧未涉及,cargo fmt / clippy / test 与本次改动无关)
  • 本地实际验证过:浅色与深色两套主题都渲染核对,气泡为浅底深字,与封面取色渐变底有足够对比
  • 新增逻辑带了测试:断言两个滑块的 label 取值,以及主题里的 showValueIndicator == onDrag、字号 12
  • 没有手改生成代码;未改 Rust API,无需重跑 flutter_rust_bridge_codegen generate
  • 没有改动依赖

给 reviewer 的备注

  • 用的是框架自带的 RectangularSliderValueIndicatorShape,没有自己写 SliderComponentShape:气泡由 OverlayPortal 画在应用 Overlay 上,所以它不会跟着页面子树被裁剪,贴到两端时框架会自动做水平位移,不会跑出窗口。
  • 试过 PaddleSliderValueIndicatorShape(那个水滴形),高度按 thumb 半径算能到 62px,放在 6px 圆点的音量条上太笨重,所以两条都统一用矩形气泡。
  • 只改了正在播放页。底部播放岛的那条进度条没动:岛上空间窄,气泡会顶到上方的曲目信息。需要的话另开一个 PR 调。
  • 气泡颜色用 scheme.inverseSurface / onInverseSurface 这组,深浅主题自动反转,不额外引入新颜色。
  • 截图:气泡在测试里能拍到,但需要抓 MaterialApp 而不是页面(它在 Overlay 层)。要看的截图我可以补到 PR 评论里。

@starry688
starry688 requested a review from Linecos as a code owner November 6, 2026 13:46
正在播放页的进度条原来只有底部两行「当前 / 总时长」,拖动过程中看不出正要
跳到哪儿;音量条更是全凭感觉。现在两条滑块都挂上 label,用框架自带的取值
气泡在圆点上方显示:进度给指尖指到的时间,音量给整数百分比。

气泡只在拖动期间出现(onDrag),松手即收,不占常驻空间;文字 12sp + 等宽
数字,跟着圆点跑时宽度不会抖。
@Linecos
Linecos force-pushed the feat/slider-drag-value branch from bb10fe9 to 9d1d906 Compare November 6, 2026 15:59
@Linecos
Linecos merged commit 255911d into Linecos:main Nov 6, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants