触控跨块选区验证
范围
即时编辑保留原有块级编辑与文档原文,通过实际 RenderParagraph/RenderEditable 的坐标映射文档选区,不把多块富文本替换成一个可见源码输入框。
- 长按正文按平台词边界选词,使用 Material/Cupertino 选择手柄,触控命中区域至少 48px。
- 两端手柄可跨标题、代码和表格移动,保留手指与端点的初始距离、Unicode 字素边界和 CRLF 源码位置。
- 接近边缘时滚动,松开、取消、切换内容或销毁后停止。
- 自适应工具栏提供剪切、复制、粘贴、全选;宿主有元素菜单时提供更多操作。
- 未编辑正文时长按不主动弹出软键盘;正在编辑的原生选区保留输入能力。链接长按保留元素菜单,空白处保留宿主的块操作。
- 文档变化、切换、外部折叠选区和点入单元格会清理旧选区;异步粘贴仍走原有版本检查和统一历史。
收尾修复
选区起点仍挂载但已经滚出视口时,原先优先采用起点作为工具栏锚点,导致终点仍可见却没有菜单。现在只在可见端点中选择锚点,增加长段落全选、滚至末尾、复制完整原文的回归测试。
自动验证
2026-10-18,Flutter 3.47.7 / Dart 3.13.5:
| 检查 | 结果 |
|---|---|
touch_document_selection_test.dart |
10 项通过,含 Android/iOS 平台主题 |
| 编辑器全部测试 | 193 项通过 |
| 应用全部测试 | 155 项通过,本机串行并生成覆盖率 |
| 文档核心/导图 | 分别 19/14 项通过 |
flutter analyze --no-pub |
无问题 |
| Windows release 构建 | 通过,版本保持 0.2.2+4 |
Android 14 / API 34 x86_64 原生模拟器 vex-closing-api34,手机应用逻辑宽度约 411px,另以 1600×1200、160dpi 覆盖平板布局。两种尺寸均通过 integration_test/touch_selection_test.dart,分别检查浅色和深色的选词、跨块拖动、剪贴板替换、一次撤销、中文表格选区、全选和系统剪贴板原文核对。
每个主题保存选词、跨块、替换、表格选词及全选五种截图。已检查手机浅色跨块/深色表格,以及平板深色跨块的原生截图。日志与截图保存在本机忽略目录:
artifacts/closing-editor-tests.logartifacts/closing-app-tests.logartifacts/closing-touch-android-phone-final.logartifacts/closing-touch-android-tablet.logartifacts/review/closing-touch-phone/artifacts/review/closing-touch-tablet/
原模拟器离线,早先 Android 重跑还遇到 JNI 生成缓存的 CMake 指纹损坏。保留原模拟器数据,改用新的专用 AVD;损坏的 JNI .cxx 及 APK 生成物隔离保留后重新构建,未修改插件源码或签名。此前失败日志不计作通过。
限制
触控事件由 Flutter 集成测试生成,剪贴板使用 Android 原生通道;这不是物理手机/平板、真实软键盘或系统输入法的人工验收。中文分词遵循平台边界,不假设各平台都将“想法”选作同一个词。iOS 未运行原生设备测试。
Android 构建仍提示 desktop_drop 的旧 Kotlin Gradle Plugin 迁移警告,需在后续依赖兼容性更新中处理。本项不代表特殊行内内容、完整长文档性能、安装包视觉或原型 98% 还原度已通过。
有疑问或建议,欢迎到 GitHub 提交 Issue 参与讨论。