Получение абсолютных координат элемента на экране в драйвере флаттера

Есть ли способ получить абсолютные координаты элемента на экране во флаттере? Я нахожу элемент за ключом, но мне также нужны его координаты (или, по крайней мере, центр). Я обнаружил, что у драйвера флаттера есть для этого несколько методов, например:

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

Но похоже, что возвращаемые значения относятся к родительскому элементу.

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

Оба эти метода возвращают одни и те же координаты.


person A. Makarevich    schedule 21.05.2020    source источник


Ответы (1)


Вам нужно будет выполнить пользовательскую функцию обработчика данных или пользовательскую команду, которая будет выполнять следующие действия в приложении:

        // 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

person Artur Korobeynyk    schedule 06.04.2021