FolderButton class

A wrapper around IconButton and AnimatedSwitcher that animates between icon, openedIcon and closedIcon depending on the value of isOpen.

The value of isOpen is mapped as follows: null -> icon -> Icons.article true -> openedIcon -> Icons.folder_open false -> closedIcon -> Icons.folder

Example:

final TreeEntry entry;
final TreeController controller;

@override
Widget build(BuildContext context) {
  bool? isOpen;
  VoidCallback? onPressed;

  if (entry.hasChildren) {
    isOpen = entry.isExpanded;
    onPressed = () => controller.toggleExpansion(entry.node);
  }

  return FolderButton(
    isOpen: isOpen,
    onPressed: onPressed,
  );
}

In the above example, the isOpen property is composed depending on the context of a TreeEntry. This widget will show icon when the entry is a leaf (i.e., has no children), openedIcon when the expansion state is set to true and closedIcon if the expansion state is set to false. The onPressed callback is set to null when the entry is a leaf disabling the button.

Inheritance

Constructors

FolderButton({Key? key, bool? isOpen = true, Widget icon = const Icon(Icons.article), Widget openedIcon = const Icon(Icons.folder_open), Widget closedIcon = const Icon(Icons.folder), double? iconSize, VisualDensity? visualDensity, EdgeInsetsGeometry padding = const EdgeInsets.all(8.0), AlignmentGeometry alignment = Alignment.center, double? splashRadius, Color? focusColor, Color? hoverColor, Color? color, Color? splashColor, Color? highlightColor, Color? disabledColor, VoidCallback? onPressed, MouseCursor? mouseCursor, FocusNode? focusNode, bool autofocus = false, String? tooltip, bool enableFeedback = true, BoxConstraints? constraints, ButtonStyle? style, Duration duration = kThemeAnimationDuration, Curve curve = Curves.linear, AnimatedSwitcherTransitionBuilder transitionBuilder = defaultFolderButtonTransitionBuilder})
Creates a FolderButton.
const

Properties

alignment AlignmentGeometry
Defines how the icon is positioned within the IconButton.
final
autofocus bool
True if this widget will be selected as the initial focus when no other node in its scope is currently focused.
final
closedIcon Widget
The icon to show when isOpen is set to false.
final
color Color?
The color to use for the icon inside the button, if the icon is enabled. Defaults to leaving this up to the icon widget.
final
constraints BoxConstraints?
Optional size constraints for the button.
final
curve Curve
The animation curve to use when transitioning the icons.
final
disabledColor Color?
The color to use for the icon inside the button, if the icon is disabled. Defaults to the ThemeData.disabledColor of the current Theme.
final
duration Duration
The duration of the transition of the icons.
final
enableFeedback bool
Whether detected gestures should provide acoustic and/or haptic feedback.
final
focusColor Color?
The color for the button when it has the input focus.
final
focusNode FocusNode?
An optional focus node to use as the focus node for this widget.
final
hashCode int
The hash code for this object.
no setterinherited
highlightColor Color?
The secondary color of the button when the button is in the down (pressed) state. The highlight color is represented as a solid color that is overlaid over the button color (if any). If the highlight color has transparency, the button color will show through. The highlight fades in quickly as the button is held down.
final
hoverColor Color?
The color for the button when a pointer is hovering over it.
final
icon Widget
The icon to show when isOpen is set to null.
final
iconSize double?
The size of the icon inside the button.
final
isOpen bool?
Defines which of icon, openedIcon and closedIcon is currently shown.
final
key Key?
Controls how one widget replaces another widget in the tree.
finalinherited
mouseCursor MouseCursor?
The cursor for a mouse pointer when it enters or is hovering over the button.
final
onPressed VoidCallback?
The callback that is called when the button is tapped or otherwise activated.
final
openedIcon Widget
The icon to show when isOpen is set to true.
final
padding EdgeInsetsGeometry
The padding around the button's icon. The entire padded icon will react to input gestures.
final
runtimeType Type
A representation of the runtime type of the object.
no setterinherited
splashColor Color?
The primary color of the button when the button is in the down (pressed) state. The splash is represented as a circular overlay that appears above the highlightColor overlay. The splash overlay has a center point that matches the hit point of the user touch event. The splash overlay will expand to fill the button area if the touch is held for long enough time. If the splash color has transparency then the highlight and button color will show through.
final
splashRadius double?
The splash radius.
final
style ButtonStyle?
Customizes this button's appearance.
final
tooltip String?
Text that describes the action that will occur when the button is pressed.
final
transitionBuilder AnimatedSwitcherTransitionBuilder
The transition funciton used to animate the icons swap.
final
visualDensity VisualDensity?
Defines how compact the icon button's layout will be.
final

Methods

build(BuildContext context) Widget
Describes the part of the user interface represented by this widget.
override
createElement() StatelessElement
Creates a StatelessElement to manage this widget's location in the tree.
inherited
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