ExpansionTile class

A single-line ListTile with an expansion arrow icon that expands or collapses the tile to reveal or hide the children.

This widget is typically used with ListView to create an "expand / collapse" list entry. When used with scrolling widgets like ListView, a unique PageStorageKey must be specified as the key, to enable the ExpansionTile to save and restore its expanded state when it is scrolled in and out of view.

This class overrides the ListTileThemeData.iconColor and ListTileThemeData.textColor theme properties for its ListTile. These colors animate between values when the tile is expanded and collapsed: between iconColor, collapsedIconColor and between textColor and collapsedTextColor.

The expansion arrow icon is shown on the right by default in left-to-right languages (i.e. the trailing edge). This can be changed using controlAffinity. This maps to the leading and trailing properties of ExpansionTile.

This example demonstrates how the ExpansionTile icon's location and appearance can be customized.
link

To create a local project with this code sample, run:
flutter create --sample=material.ExpansionTile.1 mysample

This example demonstrates how an ExpansionTileController can be used to programmatically expand or collapse an ExpansionTile.
link

To create a local project with this code sample, run:
flutter create --sample=material.ExpansionTile.2 mysample

See also:

Inheritance

Constructors

ExpansionTile({Key? key, Widget? leading, required Widget title, Widget? subtitle, ValueChanged<bool>? onExpansionChanged, List<Widget> children = const <Widget>[], Widget? trailing, bool showTrailingIcon = true, bool initiallyExpanded = false, bool maintainState = false, EdgeInsetsGeometry? tilePadding, CrossAxisAlignment? expandedCrossAxisAlignment, Alignment? expandedAlignment, EdgeInsetsGeometry? childrenPadding, Color? backgroundColor, Color? collapsedBackgroundColor, Color? textColor, Color? collapsedTextColor, Color? iconColor, Color? collapsedIconColor, ShapeBorder? shape, ShapeBorder? collapsedShape, Clip? clipBehavior, ListTileControlAffinity? controlAffinity, ExpansionTileController? controller, bool? dense, VisualDensity? visualDensity, double? minTileHeight, bool? enableFeedback = true, bool enabled = true, AnimationStyle? expansionAnimationStyle, bool internalAddSemanticForOnTap = false})
Creates a single-line ListTile with an expansion arrow icon that expands or collapses the tile to reveal or hide the children. The initiallyExpanded property must be non-null.
const

Properties

backgroundColor Color?
The color to display behind the sublist when expanded.
final
children List<Widget>
The widgets that are displayed when the tile expands.
final
childrenPadding EdgeInsetsGeometry?
Specifies padding for children.
final
clipBehavior Clip?
The content will be clipped (or not) according to this option.
final
collapsedBackgroundColor Color?
When not null, defines the background color of tile when the sublist is collapsed.
final
collapsedIconColor Color?
The icon color of tile's expansion arrow icon when the sublist is collapsed.
final
collapsedShape ShapeBorder?
The tile's border shape when the sublist is collapsed.
final
collapsedTextColor Color?
The color of the tile's titles when the sublist is collapsed.
final
controlAffinity ListTileControlAffinity?
Typically used to force the expansion arrow icon to the tile's leading or trailing edge.
final
controller ExpansionTileController?
If provided, the controller can be used to expand and collapse tiles.
final
dense bool?
Whether this list tile is part of a vertically dense list.
final
enabled bool
Whether this expansion tile is interactive.
final
enableFeedback bool?
Whether detected gestures should provide acoustic and/or haptic feedback.
final
expandedAlignment Alignment?
Specifies the alignment of children, which are arranged in a column when the tile is expanded.
final
expandedCrossAxisAlignment CrossAxisAlignment?
Specifies the alignment of each child within children when the tile is expanded.
final
expansionAnimationStyle AnimationStyle?
Used to override the expansion animation curve and duration.
final
hashCode int
The hash code for this object.
no setterinherited
iconColor Color?
The icon color of tile's expansion arrow icon when the sublist is expanded.
final
initiallyExpanded bool
Specifies if the list tile is initially expanded (true) or collapsed (false, the default).
final
internalAddSemanticForOnTap bool
Whether to add button:true to the semantics if onTap is provided. This is a temporary flag to help changing the behavior of ListTile onTap semantics.
final
key Key?
Controls how one widget replaces another widget in the tree.
finalinherited
leading Widget?
A widget to display before the title.
final
maintainState bool
Specifies whether the state of the children is maintained when the tile expands and collapses.
final
minTileHeight double?
The minimum height allocated for the ListTile widget.
final
onExpansionChanged ValueChanged<bool>?
Called when the tile expands or collapses.
final
runtimeType Type
A representation of the runtime type of the object.
no setterinherited
shape ShapeBorder?
The tile's border shape when the sublist is expanded.
final
showTrailingIcon bool
Specifies if the ExpansionTile should build a default trailing icon if trailing is null.
final
subtitle Widget?
Additional content displayed below the title.
final
textColor Color?
The color of the tile's titles when the sublist is expanded.
final
tilePadding EdgeInsetsGeometry?
Specifies padding for the ListTile.
final
title Widget
The primary content of the list item.
final
trailing Widget?
A widget to display after the title.
final
visualDensity VisualDensity?
Defines how compact the expansion tile's layout will be.
final

Methods

createElement() StatefulElement
Creates a StatefulElement to manage this widget's location in the tree.
inherited
createState() State<ExpansionTile>
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, int wrapWidth = 65}) 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