markSelectedByIds method

void markSelectedByIds(
  1. List<MultiSelectorEntity> nodes,
  2. List<String> ids
)

O(N) 单次递归,通过判断整个 selectedIds 集合标记是否选中

Implementation

void markSelectedByIds(List<MultiSelectorEntity> nodes, List<String> ids) {
  for (var node in nodes) {
    node.isSelected = ids.contains(node.id);
    if (node.children != null && node.children!.isNotEmpty) {
      markSelectedByIds(node.children!, ids);
      // 如果子节点中有一个选中,则父节点也应选中
      if (node.children!.any((c) => c.isSelected)) {
        node.isSelected = true;
      }
    }
  }
}