build method
Adds the TreeViewItem.parent property to the TreeViewItems and calculates other internal properties.
Implementation
List<TreeViewItem> build({TreeViewItem? parent}) {
if (isNotEmpty) {
final list = <TreeViewItem>[];
final anyExpandableSiblings = any((i) => i.isExpandable);
for (final item in this) {
item
.._parent = parent
.._anyExpandableSiblings = anyExpandableSiblings;
if (parent != null) {
item._visible = parent._visible;
}
if (item._visible) {
list.add(item);
}
final itemAnyExpandableSiblings =
item.children.any((i) => i.isExpandable);
for (final child in item.children) {
// only add the children when it's expanded and visible
child
.._visible = item.expanded && item._visible
.._parent = item
.._anyExpandableSiblings = itemAnyExpandableSiblings;
if (child._visible) {
list.add(child);
}
if (child.expanded) {
list.addAll(child.children.build(parent: child));
}
}
}
return list;
}
return this;
}