维刻 Vex
GitHub
维刻 Vex / 文档 / 触控跨块选区验证

触控跨块选区验证

范围

即时编辑保留原有块级编辑与文档原文,通过实际 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.log
  • artifacts/closing-app-tests.log
  • artifacts/closing-touch-android-phone-final.log
  • artifacts/closing-touch-android-tablet.log
  • artifacts/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 参与讨论。
tems[selIndex] as HTMLAnchorElement).click(); } } });