文件页定位当前文件回归检查
问题与修复
- 定位使用全部文件的索引,而列表与树形显示的是高级筛选后的结果,导致滚动偏移。
- 修复为在清除快速过滤后,复用实际筛选快照计算文件或树节点的行号。
- 高级筛选及修改时间条件保持不变;当前文件被排除时在导航面板上方显示 Flutter 提示框。
t2 模拟器验证
- 设备:AVD
t2,emulator-5556,Android 15 / API 35,x86_64。 - 使用新建的隔离本地仓库
QA-locate-20261027,包含 180 篇测试笔记。 - 100 篇位于
excluded/,80 篇位于kept/;高级筛选仅显示kept/。 - 当前文件为
kept/file030.md,分别点击树形与列表的“定位当前文件”。- 修复前两种模式均错误滚到
file070.md附近,目标不可见。 - 修复后两种模式均将
file030.md定位到结果区顶部,所在行范围为 y=273–307。
- 修复前两种模式均错误滚到
- 当前文件改为
excluded/file030.md后,点击定位显示可见的应用内提示框,保留筛选条件。 - 取消高级筛选,将当前文件改为末尾的
kept/file079.md,定位后目标可见。 - 修复后的 Debug APK 已安装并重启于 t2。
验证与证据
- 新增 4 项 Widget 回归:树形/列表在目录及修改时间筛选下定位,以及文件被排除时提示。
- 修改前 4 项失败,修复后通过;文件选择器相关测试共 13 项通过。
flutter test --no-pub:584 项通过。flutter analyze --no-pub:1 条既有 info,位于未修改的test/mp3/mp3_refresh_view_test.dart:37。curly_braces_in_flow_control_structures;已核对 HEAD 中存在同样代码,本次未修改无关文件。
flutter build apk --debug --no-pub --target-platform android-x64:通过。- 构建前按项目约定设置当前进程的 Java Unix socket 临时目录。
- 原始 UI XML、截图、临时脚本及日志:
build/qa-locate/。 - 截图:修复前、 修复后、 文件被筛选排除时提示。
- 范围限制:本次未做真机和 iOS 测试。
缓存结果误报与清空问题复测
本节更新定位行为:定位只使用当前显示的结果快照,保留所有过滤词、条件和结果, 不再清除快速过滤或强制重新筛选。
- 根因:面板重开后可以复用结果缓存,但尚未加载修改时间;定位强制重算时使用空的修改时间映射, 将原本符合时间条件的文件全部排除,同时覆盖了原结果缓存。
- Widget 回归新增树形/列表 × 当前文件包含/排除共 4 项,覆盖重开面板、空修改时间映射和已有缓存。
- 修复前 4 项均失败;修复后选择器相关 17 项通过。
- 断言定位不重新读取修改时间、不替换结果缓存、不清除过滤词,错误提示关闭后原结果仍显示。
- t2 实测使用同一隔离仓库,启用最近七天和
file快速过滤,再关闭并重开面板。- 修复前四种场景均弹出提示,随后过滤词被清空、80 条结果消失。
- 修复后包含目标时正常定位;排除目标时仅提示;四种场景均保留
file和 80 条结果。 - 截图:包含目标时定位、 排除目标并关闭提示后保留结果。
- 最终
flutter test --no-pub:589 项通过。 - 最终
flutter analyze --no-pub:仍仅有上述未修改 MP3 测试中的既有 info。 - x86_64 Debug APK 构建通过,已安装到 t2 并重启验证;未做真机和 iOS 测试。
- 本次原始 UI XML、截图及验证日志位于
build/qa-locate-cache/,临时脚本为build/qa-locate/cache-device.py。
