在Flutter驱动程序中获取屏幕上的元素绝对坐标

时间:2020-05-21 13:12:24

标签: android flutter flutter-widget flutterdriver

有没有一种方法可以在抖动中获取屏幕上元素的绝对坐标?我正在按键查找元素,但我也需要它的坐标(或在游标中心)。我发现flutter驱动程序为此提供了一些方法,例如:

driver.getTopLeft(find.byValueKey('some_element_key'));
driver.getBottomRight(find.byValueKey('some_element_key'));

但是看起来返回的值是相对于父元素的。

driver.getRenderObjectDiagnostics(find.byValueKey('accounts'));
driver.getWidgetDiagnostics(find.byValueKey('accounts'));

这两种方法都返回相同的坐标。

1 个答案:

答案 0 :(得分:0)

您将需要执行自定义数据处理函数或自定义命令,以在应用中执行以下操作:

        // grab the top most widget for your app, maybe first() will work instead of firstWhere()
        var element = collectAllElementsFrom(
                WidgetsBinding.instance.renderViewElement,
                skipOffstage: false)
            .firstWhere((element) =>
                element.widget == <some_filtering_here>);
        // get render box
        final RenderBox box = element.renderObject as RenderBox;
        // get global coordinates
        Offset centerOffset = box.localToGlobal(box.size.center(Offset.zero));

在此处详细了解自定义查找器和自定义命令:

https://arturkorobeynyk.medium.com/using-commands-to-query-flutter-driver-for-widgets-states-and-properties-c7a5a18fea42

https://arturkorobeynyk.medium.com/using-gestures-within-data-handler-function-of-flutter-driver-extension-6b4347be4b7c