ArcaneJaspr Codex
Documentation
ArcaneTreeView
Hierarchical tree structure display
Live Demo
src
main.dart
app.dart
lib
utils.dart
models.dart
pubspec.yaml
Click a file to select

ArcaneTreeView#

A tree view component for displaying hierarchical data with expand/collapse functionality.

Basic Usage#

ArcaneTreeView(
  nodes: [
    TreeNode(
      id: 'src',
      label: 'src',
      children: [
        TreeNode(id: 'main', label: 'main.dart'),
        TreeNode(id: 'app', label: 'app.dart'),
      ],
    ),
    TreeNode(id: 'pubspec', label: 'pubspec.yaml'),
  ],
)

Properties#

PropertyTypeDefaultDescription
nodes List<TreeNode> required Tree nodes
style TreeViewStyle lines Visual style
selectionMode TreeSelectionMode none Selection behavior
selectedIds Set<String> {} Selected node IDs
expandedIds Set<String> {} Expanded node IDs
onSelectionChanged ValueChanged<Set<String>>? null Selection callback
onExpansionChanged ValueChanged<Set<String>>? null Expansion callback
onNodeTap ValueChanged<TreeNode>? null Node tap callback

TreeNode Properties#

PropertyTypeDescription
idStringUnique identifier
labelStringDisplay label
iconComponent?Node icon
childrenList<TreeNode>Child nodes
isExpandedboolInitial expansion state
isDisabledboolDisable node

Style Variants#

// Lines (default)
ArcaneTreeView(
  nodes: nodes,
  style: TreeViewStyle.lines,
)

// Clean
ArcaneTreeView(
  nodes: nodes,
  style: TreeViewStyle.clean,
)

// Compact
ArcaneTreeView(
  nodes: nodes,
  style: TreeViewStyle.compact,
)

Selection Modes#

// No selection (default)
ArcaneTreeView(
  nodes: nodes,
  selectionMode: TreeSelectionMode.none,
)

// Single selection
ArcaneTreeView(
  nodes: nodes,
  selectionMode: TreeSelectionMode.single,
  selectedIds: {selectedId},
  onSelectionChanged: (ids) => setState(() => selectedId = ids.first),
)

// Multiple selection
ArcaneTreeView(
  nodes: nodes,
  selectionMode: TreeSelectionMode.multiple,
  selectedIds: selectedIds,
  onSelectionChanged: (ids) => setState(() => selectedIds = ids),
)

With Icons#

ArcaneTreeView(
  nodes: [
    TreeNode(
      id: 'src',
      label: 'src',
      icon: ArcaneIcon.folder(),
      children: [
        TreeNode(
          id: 'main.dart',
          label: 'main.dart',
          icon: ArcaneIcon.file(),
        ),
      ],
    ),
  ],
)

Examples#

File Explorer#

ArcaneTreeView(
  nodes: [
    TreeNode(
      id: 'project',
      label: 'my_project',
      icon: ArcaneIcon.folder(),
      children: [
        TreeNode(
          id: 'lib',
          label: 'lib',
          icon: ArcaneIcon.folder(),
          children: [
            TreeNode(id: 'main', label: 'main.dart', icon: ArcaneIcon.file()),
            TreeNode(id: 'app', label: 'app.dart', icon: ArcaneIcon.file()),
          ],
        ),
        TreeNode(id: 'pubspec', label: 'pubspec.yaml', icon: ArcaneIcon.file()),
        TreeNode(id: 'readme', label: 'README.md', icon: ArcaneIcon.file()),
      ],
    ),
  ],
  style: TreeViewStyle.lines,
  selectionMode: TreeSelectionMode.single,
  onNodeTap: (node) => openFile(node.id),
)

Category Browser#

ArcaneTreeView(
  nodes: [
    TreeNode(
      id: 'electronics',
      label: 'Electronics',
      children: [
        TreeNode(
          id: 'phones',
          label: 'Phones',
          children: [
            TreeNode(id: 'iphone', label: 'iPhone'),
            TreeNode(id: 'android', label: 'Android'),
          ],
        ),
        TreeNode(id: 'laptops', label: 'Laptops'),
      ],
    ),
    TreeNode(
      id: 'clothing',
      label: 'Clothing',
      children: [
        TreeNode(id: 'mens', label: "Men's"),
        TreeNode(id: 'womens', label: "Women's"),
      ],
    ),
  ],
  selectionMode: TreeSelectionMode.single,
  onSelectionChanged: (ids) => filterByCategory(ids.first),
)