buildTree static method
- List<
TopicModel> flatList
Build a tree of TopicModel from a flat list using parent_topic_id.
Implementation
static List<TopicModel> buildTree(List<TopicModel> flatList) {
final Map<String, List<TopicModel>> childrenMap = {};
for (final topic in flatList) {
final parentId = topic.parentTopicId ?? '';
childrenMap.putIfAbsent(parentId, () => []);
childrenMap[parentId]!.add(topic);
}
TopicModel attachChildren(TopicModel node) {
final kids = childrenMap[node.id] ?? [];
kids.sort((a, b) => a.sortOrder.compareTo(b.sortOrder));
final resolvedKids = kids.map(attachChildren).toList();
return node.copyWith(children: resolvedKids);
}
// Root nodes have no parent
final roots = childrenMap[''] ?? [];
roots.sort((a, b) => a.sortOrder.compareTo(b.sortOrder));
return roots.map(attachChildren).toList();
}