build method

List<TreeViewItem> build({
  1. TreeViewItem? parent,
})

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;
}