我需要一个应用程序的首次运行指南,并遇到了两个让我恼火的问题。

第一个问题是,高亮显示会出现在错误的位置。

许多coach-mark的实现会在第一次绘制时确定目标的位置并绘制它。滚动列表,打开键盘,旋转设备,调整桌面窗口大小——突然,空洞就出现在按钮旁边,而不是在按钮上。

第二个问题是,模糊的空洞会告诉用户某个东西在哪里,但不会告诉用户如何使用它。

“将这张牌拖到那一列”并不是一个静态高亮可以真正表达的。

所以我创建了keyspot:

-spotlight和指针每一帧都会重新解析目标的几何学,从其 GlobalKey 中获取它,才能跟踪滚动,边距,旋转和调整大小。

-一个动画的手指指针,它会沿着直线或弧线滑动,旋转从其当前角度,点击脉冲——足以表达拖动和捏合等交互行为,而不是简单地指向某个东西。

-指针动画从实际AnimationController完成而不是Future.delayed时间来解析,所以 `await pointer.moveTo(...)`实际上意味着移动已经完成。

-屏障模式,只有切口是可点击的,而实际widget的 `onPressed`仍然会触发——在walkthrough中要求用户实际执行步骤时非常有用。

-跟踪器也是公共API(`KeyspotAnchorTracker`),所以它可以独立使用来处理像标签或连接线附着到widget的东西。

-没有运行时依赖项。手指指针是使用CustomPainter而不是图像资源来渲染的。

-支持所有六个Flutter平台。

实时演示:https://shrey-17bhardwaj.github.io/keyspot/

pub.dev:https://pub.dev/packages/keyspot

源代码:https://github.com/shrey-17bhardwaj/keyspot

当前版本是0.3.1,API可能在1.0之前会发生变化。

我非常希望收到关于这个方法在哪里会破裂的反馈,特别是在嵌套导航器,高度懒惰的列表,覆盖层或任何其他地方的widget几何学会变得复杂的地方。