toTree method
将列表转换为树
Implementation
Iterable<Map> toTree({
String idKey = kTreeIdKey,
String pidKey = kTreePidKey,
String childrenKey = kTreeChildrenKey,
String? rootId,
}) {
final List<Map> nodes = [...this];
final Map<String, Map> nodeMap = {};
for (var node in nodes) {
nodeMap[node[idKey]] = {...node};
}
final List<Map> tree = [];
for (var node in nodeMap.values) {
final String? parentId = node[pidKey];
if (parentId == rootId || parentId == null || parentId.isEmpty) {
tree.add(node);
} else {
// 通过映射表快速找到父节点
final Map? parentNode = nodeMap[parentId]?.cast<String, dynamic>();
if (parentNode != null) {
(parentNode[childrenKey] ??= <Map>[]).add(node);
}
}
}
return tree;
}