Uninote
Uninote
用户根目录
brdr
common
programming
docs
tests
后端试题
问题讨论

文件页定位当前文件回归检查

问题与修复

  • 定位使用全部文件的索引,而列表与树形显示的是高级筛选后的结果,导致滚动偏移。
  • 修复为在清除快速过滤后,复用实际筛选快照计算文件或树节点的行号。
  • 高级筛选及修改时间条件保持不变;当前文件被排除时在导航面板上方显示 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 快速过滤,再关闭并重开面板。
  • 最终 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。

2026-10-25-window-block-repro

2026-10-27-sync-file-access

点赞(0) 阅读(12) 举报
目录
标题