SliverTreeView<Data, Tree extends ITreeNode<Data>> class final

The SliverTreeView allows to visually display a tree data structure in a linear list which animates the node addition, removal, changes and expansion/collapse of the node.

The SliverTreeView is based on the SliverAnimatedList, so it can be used as a replacement of SliverAnimatedList.

The main advantage of using a SliverTreeView over the TreeView is that it can be easily used with others slivers in a CustomScrollView, which means that you can easily implement a fancy animated list. The slivers are lazy loaded by default, so it can be easily mixed with other widgets without any loss of performance.

The default SliverTreeView.simple uses a TreeNode internally, which is based on the Map data structure for maintaining the children states. The TreeNode does not allow insertion and removal of items at index positions. This allows for more efficient insertion and retrieval of items at child nodes, as child items can be readily accessed using the map keys.

The complexity for accessing child nodes in SliverTreeView is simply O(node_level). e.g. for path './.level1/level2', complexity is simply O(2).

Inheritance

Properties

animation Animation<double>?
An optional animation for AnimatedList. If no animation is provided, AnimatedList falls back on its default.
finalinherited
builder TreeNodeWidgetBuilder<Tree>
The builder function that is provided to the item builder
finalinherited
expansionBehavior ExpansionBehavior
The ExpansionBehavior provides control over the behavior of the node when it is expanded.
finalinherited
expansionIndicatorBuilder ExpansionIndicatorBuilder
Builder function for building the expansion indicator. It takes a Tree and builds the expansion indicator based on whether the tree node is expanded or not.
finalinherited
focusToNewNode bool
Should the tree move the focus to a new (added or inserted) node. It is true by default. If false, the TreeView will not scroll to the new nodes when they are added or inserted to the tree.
finalinherited
hashCode int
The hash code for this object.
no setterinherited
indentation Indentation
This is the indentation applied to the start of an item. Indentation.width will be multiplied by INode.level before being applied. ** e.g. if the node level is 2 and Indentation.width is 8, then the start padding applied to an item will be 2*8 = 16
finalinherited
key Key?
Controls how one widget replaces another widget in the tree.
finalinherited
onItemTap ValueSetter<Tree>?
An optional callback that can be used to handle any action when an item is tapped or clicked
finalinherited
onTreeReady TreeReadyCallback<Data, Tree>?
Callback to get the TreeViewController when the TreeView is ready
finalinherited
padding EdgeInsetsGeometry?
The amount of space by which to inset the children.
finalinherited
runtimeType Type
A representation of the runtime type of the object.
no setterinherited
scrollController AutoScrollController?
An optional scrollController that provides more granular control over scrolling behavior
finalinherited
showRootNode bool
Flag to show the Root Node in the TreeView. Root Node is always the first item in the TreeView. If it is set to false then the Root Node will not be displayed, rather the first child of the RootNode will be the first item in the TreeList
finalinherited
tree ITreeNode<Data>
The rootNode of the tree. If the tree is updated using setState or any other state management tool, then a TreeDiff is performed to get all the nodes that have been modified between the old and new trees. The TreeDiffUpdate result is then used to apply the changes in the new tree to the old tree.
finalinherited

Methods

createElement() StatefulElement
Creates a StatefulElement to manage this widget's location in the tree.
inherited
createState() State<StatefulWidget>
Creates the mutable state for this widget at a given location in the tree.
override
debugDescribeChildren() List<DiagnosticsNode>
Returns a list of DiagnosticsNode objects describing this node's children.
inherited
debugFillProperties(DiagnosticPropertiesBuilder properties) → void
Add additional properties associated with the node.
inherited
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
toDiagnosticsNode({String? name, DiagnosticsTreeStyle? style}) DiagnosticsNode
Returns a debug representation of the object that is used by debugging tools and by DiagnosticsNode.toStringDeep.
inherited
toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) String
A string representation of this object.
inherited
toStringDeep({String prefixLineOne = '', String? prefixOtherLines, DiagnosticLevel minLevel = DiagnosticLevel.debug}) String
Returns a string representation of this node and its descendants.
inherited
toStringShallow({String joiner = ', ', DiagnosticLevel minLevel = DiagnosticLevel.debug}) String
Returns a one-line detailed description of the object.
inherited
toStringShort() String
A short, textual description of this widget.
inherited

Operators

operator ==(Object other) bool
The equality operator.
inherited

Static Methods

indexed<Data>({Key? key, required TreeNodeWidgetBuilder<IndexedTreeNode<Data>> builder, required IndexedTreeNode<Data> tree, ExpansionBehavior expansionBehavior = ExpansionBehavior.none, Indentation? indentation, AutoScrollController? scrollController, ExpansionIndicatorBuilder? expansionIndicatorBuilder, ValueSetter<IndexedTreeNode<Data>>? onItemTap, EdgeInsetsGeometry? padding, bool showRootNode = true, bool focusToNewNode = true, TreeReadyCallback<Data, IndexedTreeNode<Data>>? onTreeReady, Animation<double>? animation}) SliverTreeView<Data, IndexedTreeNode<Data>>
The alternate implementation of SliverTreeView uses an IndexedNode internally, which is based on the List data structure for maintaining the children states. The IndexedNode allows indexed based operations like insertion and removal of items at index positions. This allows for movement, addition and removal of child nodes based on indices.
indexTyped<Data, Tree extends IndexedTreeNode<Data>>({Key? key, required TreeNodeWidgetBuilder<Tree> builder, required Tree tree, ExpansionBehavior expansionBehavior = ExpansionBehavior.none, Indentation? indentation, AutoScrollController? scrollController, ExpansionIndicatorBuilder? expansionIndicatorBuilder, ValueSetter<Tree>? onItemTap, EdgeInsetsGeometry? padding, bool showRootNode = true, bool focusToNewNode = true, TreeReadyCallback<Data, Tree>? onTreeReady, Animation<double>? animation}) SliverTreeView<Data, Tree>
Use the typed constructor if you are extending the IndexedTreeNode instead of directly wrapping the data in the IndexedTreeNode. Using the SliverTreeView.indexTyped allows the builder to return the correctly typed Tree object.
simple<Data>({Key? key, required TreeNodeWidgetBuilder<TreeNode<Data>> builder, required TreeNode<Data> tree, ExpansionBehavior expansionBehavior = ExpansionBehavior.none, Indentation? indentation, AutoScrollController? scrollController, ExpansionIndicatorBuilder? expansionIndicatorBuilder, ValueSetter<TreeNode<Data>>? onItemTap, EdgeInsetsGeometry? padding, bool showRootNode = true, bool focusToNewNode = true, TreeReadyCallback<Data, TreeNode<Data>>? onTreeReady, Animation<double>? animation}) SliverTreeView<Data, TreeNode<Data>>
The default implementation of SliverTreeView that uses a TreeNode internally, which is based on the Map data structure for maintaining the children states. The TreeNode does not allow insertion and removal of items at index positions. This allows for more efficient insertion and retrieval of items at child nodes, as child items can be readily accessed using the map keys.
simpleTyped<Data, Tree extends TreeNode<Data>>({Key? key, required TreeNodeWidgetBuilder<Tree> builder, required Tree tree, ExpansionBehavior expansionBehavior = ExpansionBehavior.none, Indentation? indentation, AutoScrollController? scrollController, ExpansionIndicatorBuilder? expansionIndicatorBuilder, ValueSetter<Tree>? onItemTap, EdgeInsetsGeometry? padding, bool showRootNode = true, bool focusToNewNode = true, TreeReadyCallback<Data, Tree>? onTreeReady, Animation<double>? animation}) SliverTreeView<Data, Tree>
Use the typed constructor if you are extending the TreeNode instead of directly wrapping the data in the TreeNode. Using the SliverTreeView.simpleTyped allows the builder to return the correctly typed Tree object.