buildRelationshipTreeData static method

List<TreeNode> buildRelationshipTreeData(
  1. List<Map<String, dynamic>> data
)

Implementation

static List<TreeNode> buildRelationshipTreeData(
  List<Map<String, dynamic>> data,
) {
  Map<int, TreeNode> nodeMap = {};
  List<TreeNode> rootNodes = [];

  for (var item in data) {
    nodeMap.putIfAbsent(
      item["id"],
      () => TreeNode(
        id: item["id"],
        title: item["value"],
        parent: null,
        children: [],
      ),
    );
  }

  for (var item in data) {
    var node = nodeMap[item["id"]];
    if (node == null) continue;

    if (!nodeMap.containsKey(item["parentId"])) {
      rootNodes.add(node);
      node.hierarchy = 0;
    } else {
      var parentNode = nodeMap[item["parentId"]];
      if (parentNode != null) {
        node.parent = parentNode;
        parentNode.children.add(node);
        node.hierarchy = parentNode.hierarchy + 1;
      }
    }
  }

  return rootNodes;
}