小部件上的颤振检测指针事件



我有一个样例代码,检测鼠标悬停在一个小部件上。

代码来自这个Stackoverflow问题。

简而言之。它使用GestureBinding.instance?.pointerRouter.addGlobalRoute进行绑定,并在事件类型为stylus时检查处理程序。当触控笔悬停在屏幕上(无接触)时触发。

Text(),Container()等小部件上工作得很好

问题:

我想在不同的小部件上使用此功能,FlutterInAppWebView,但事件将不会被触发,直到笔与表面接触。即使在容器上,如果子节点是InAppWebView,它也不起作用。

我想这个问题也会出现在其他小部件上。

我试了Listener,AbsorbPointerIgnorePointer

更新1:

当我开始将触控笔悬停在屏幕上时,我可以在调试输出中看到以下内容。

I/ViewRootImpl(23491): updatePointerIcon pointerType = 20001, calling pid = 23491
D/InputManager(23491): setPointerIconType iconId = 20001, callingPid = 23491
更新2:

InAppWebView有一个选项useHybridComposition,默认是false。将其设置为true可以解决此问题。但是WebView变得非常慢。

这是一个显示问题的存储库。

谢谢!

如下所述,这个问题有两个解决方案。

  1. 设置useHybridComposition为true。对于速度慢,也许可以向repo提出一个问题。

  2. 在android/ios级别而不是Flutter级别挂钩,并将事件转发回Flutter。


调试方法可能是这样的:首先,打印出方法中的指针事件,比如你的_handleEvent。然后,您将知道指针事件是刚刚发生,还是甚至没有发生。

其次,尝试哪些小部件可以,哪些不可以。文本没问题,WebView不行。那么集装箱可以吗?InkWell还好吗?IconButton OK吗?IconButton OK吗?等。通过这样做,您可以深入了解文本的特殊之处,使其能够工作。

第三,作为一个hack的解决方案,你能试试Text.rich(WidgetSpan(child: your_web_view))吗?既然你说文本OK,而其他小部件不OK

最后,也许需要深入文本的源代码,看看会发生什么神奇的事情——可能是一些特殊的配置?-让它工作

相关内容

  • 没有找到相关文章

最新更新