XPath.createBy constructor

XPath.createBy({
  1. required Element element,
  2. required Element pageElement,
})

Implementation

factory XPath.createBy({
  required Element element,
  required Element pageElement,
}) {
  // int startTime = DateTime.now().millisecondsSinceEpoch;

  XPath xpath = XPath._(element);
  xpath._targetElement = element;

  final highLevelSet = _PathConst.highLevelSet;
  LinkedList<_ElementEntry> origalPath = LinkedList();
  origalPath.add(_ElementEntry(element));

  bool lookforTarget = true;
  element.visitAncestorElements((parent) {
    if (parent.widget is GestureDetector) {
      lookforTarget = false;
    }
    if (lookforTarget && highLevelSet.contains(parent.widget.runtimeType)) {
      xpath._targetElement = parent;
    }
    origalPath.add(_ElementEntry(parent));
    if (pageElement == parent) {
      return false;
    }
    return true;
  });

  LinkedList<_PathNode> path = xpath._buildFromOrigal(xpath._targetElement, origalPath);
  xpath._shortPath(path);

  if (path.isNotEmpty) {
    path.first.isPage = true;
  }
  path.forEach((node) => node.computeIndex());
  xpath._path = path;

  // int endTime = DateTime.now().millisecondsSinceEpoch;
  // RangersApplogLogger.getInstance().info('clickInfo - ${endTime - startTime}');

  return xpath;
}