getProperties method

  1. @override
Map<String, dynamic> getProperties({
  1. Element? ancestor,
})
override

Implementation

@override
Map<String, dynamic> getProperties({Element? ancestor}) {
  Map<String, dynamic> properties = {};

  properties[WidgetProperty.top.name] = 0;
  properties[WidgetProperty.left.name] = 0;
  properties[WidgetProperty.width.name] = 1080;
  properties[WidgetProperty.height.name] = 2337;
  properties[WidgetProperty.id.name] = element.hashCode;
  properties[WidgetProperty.className.name] = element.widget.toString();
  properties[WidgetProperty.flutterElement.name] = true;
  properties[WidgetProperty.accessibilityLabel.name] =
      element.findAncestorWidgetOfExactType<Semantics>()?.properties.label ?? '';    properties[WidgetProperty.accessibilityId.name] =
      element.widget.runtimeType.toString();

  try {
    RenderBox? rbox = element.findRenderObject() as RenderBox?;
    RenderBox? ancestorRbox = ancestor?.findRenderObject() as RenderBox?;
    var offset = rbox!.localToGlobal(Offset.zero, ancestor: ancestorRbox);
    var screenOffset = rbox.localToGlobal(Offset.zero);
    final size = rbox.size;

    // get device pixel ratio
    FlutterView view = WidgetsBinding.instance.platformDispatcher.views.first;
    var devicePixelRatio = view.devicePixelRatio;
    // here multiple of 2.75 because the ScreenShot size in 2.75 they help to detect element of Hierarchy
    properties[WidgetProperty.top.name] =
        (offset.dy.toInt() * devicePixelRatio);
    properties[WidgetProperty.left.name] =
        (offset.dx.toInt() * devicePixelRatio);
    properties[WidgetProperty.screenY.name] =
        (screenOffset.dy.toInt() * devicePixelRatio);
    properties[WidgetProperty.screenX.name] =
        (screenOffset.dx.toInt() * devicePixelRatio);
    properties[WidgetProperty.width.name] =
        (size.width.toInt() * devicePixelRatio);
    properties[WidgetProperty.height.name] =
        (size.height.toInt() * devicePixelRatio);
    properties[WidgetProperty.visible.name] = isWidgetVisible(rbox);
    properties[WidgetProperty.visibility.name] = isWidgetVisible(rbox);
  } catch (e) {}

  return properties;
}