【问题标题】:Is there a way to simulate a touch on a specific position of a widget or screen?有没有办法模拟对小部件或屏幕特定位置的触摸?
【发布时间】:2022-01-20 09:23:36
【问题描述】:

我想在小部件上的某处进行触摸或点按,而不让用户在该点明确触摸屏幕。有什么办法吗?

我已经检查了 SO 答案,有些人建议使用“集成测试”,但在没有物理连接或以某种方式连接到笔记本电脑的设备上无法执行此操作(找不到更好的措辞)。

我还尝试做一个 hitTest,想知道它在与 UI 交互时是否真的触摸或点击了屏幕,但似乎没有。

              onPressed: () {
                    RenderObject? rb = context.findRenderObject();
                    if (rb is RenderBox){
                      final hit = BoxHitTestResult();
                      if (rb.hitTest(hit, position: Offset(300,500))){
                        print(hit.path);
                      }
                    }
                  },

另外,请正确理解这个问题,因为在我一直在阅读的关于我的查询的许多答案中,答案都是“你不需要它,只需调用函数/方法”。我想“模拟”在屏幕的某个指定位置上的点击,可能是根据我在代码上尝试的 X、Y 轴。

真诚地感谢您的任何指示。

如果我的问题有什么不足,请告诉我。

编辑:(以下是我发现的更新)

我深入研究了 Flutter 代码。我找到了几个文件: 在flutter/src/gestures/hit_test.dart 下我找到了void handleEvent(PointerEvent event, HitTestEntry entry);。我假设它消耗PointerEvent。进一步检查, 在flutter/src/gestures/events.dart 下我找到class PointerDownEvent extends PointerEventflutter_test/src/test_pointer.dart 我找到class TestPointer

这些文件中的任何一个都可以说明我想要做什么吗?我正在检查。

【问题讨论】:

  • Secondly I want to ask, is there any "app development software" 在一篇文章中提出多个问题并要求对软件提出建议是解决问题的好方法 :) 一次只回答一个问题,不要寻求建议到软件
  • 你的意思是这样的解决方法:Timer(Duration(seconds: 3), () { WidgetsBinding.instance!.handlePointerEvent(PointerDownEvent(pointer: 0, position: Offset(100, 100),)); WidgetsBinding.instance!.handlePointerEvent(PointerUpEvent(pointer: 0,position: Offset(100, 100),)); }); - 当然,在大多数情况下,两个构造函数都应该添加更多属性以使其工作
  • @a_local_nobody 对 ^^ 删除它!
  • @pskink 感谢您的评论,我当然正在寻找有关您所说内容的更多信息。您是否可以提供一个片段代码,它可以做一些简单的事情,“可能有两个墨水按钮,如果按下第一个按钮,模拟点击第二个按钮上的位置,假设它会显示墨水-动画(?)也是?”它肯定会让我更加敞开心扉,但我对你的评论很满意,因为我正在寻找更多关于它的信息:)谢谢。另外,both constructors should add more properties for it to work in most cases 是什么意思?
  • 我给了你一段代码如何模拟一个简单的GestureDetector.onTap事件——它是通过处理指针向下事件和指针向上事件来完成的,只需添加一些GestureDetector并检查它, “另外,你的意思是,两个构造函数都应该添加更多属性以使其在大多数情况下工作?” - 我不知道可能需要timeStamp 吗?现在它设置为this

标签: android flutter macros click flutter-test


【解决方案1】:

感谢@pskink,以下代码最适合我/这种情况。我已经能够根据需要制作水龙头。非常感谢。

WidgetsBinding.instance!.handlePointerEvent(PointerDownEvent(pointer: 0, position: Offset(100, 100),)); WidgetsBinding.instance!.handlePointerEvent(PointerUpEvent(pointer: 0,position: Offset(100, 100),));

【讨论】:

  • 如果此解决方法解决了您的问题,请将其标记为已接受以帮助其他人了解它
  • @Mohammad SO 说我可以在“2”天内接受我自己的答案,因此不能。我以前也试过。
猜你喜欢
  • 1970-01-01
  • 2012-09-03
  • 1970-01-01
  • 2011-11-22
  • 1970-01-01
  • 1970-01-01
  • 2014-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多