Получение абсолютных координат элемента на экране в драйвере флаттера
Есть ли способ получить абсолютные координаты элемента на экране во флаттере? Я нахожу элемент за ключом, но мне также нужны его координаты (или, по крайней мере, центр). Я обнаружил, что у драйвера флаттера есть для этого несколько методов, например:
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 ответ
Вам нужно будет выполнить пользовательскую функцию обработчика данных или пользовательскую команду, которая будет выполнять следующие действия в приложении:
// 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));
Подробнее о настраиваемых средствах поиска и настраиваемых командах здесь: