DropdownButton<T> class Null safety

A material design button for selecting from a list of items.

A dropdown button lets the user select from a number of items. The button shows the currently selected item as well as an arrow that opens a menu for selecting another item.

The type T is the type of the value that each dropdown item represents. All the entries in a given menu must represent values with consistent types. Typically, an enum is used. Each DropdownMenuItem in items must be specialized with that same type argument.

The onChanged callback should update a state variable that defines the dropdown's value. It should also call State.setState to rebuild the dropdown with the new value.

This sample shows a DropdownButton with a large arrow icon, purple text style, and bold purple underline, whose value is one of "One", "Two", "Free", or "Four".

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

If the onChanged callback is null or the list of items is null then the dropdown button will be disabled, i.e. its arrow will be displayed in grey and it will not respond to input. A disabled button will display the disabledHint widget if it is non-null. However, if disabledHint is null and hint is non-null, the hint widget will instead be displayed.

Requires one of its ancestors to be a Material widget.

See also:



Creates a dropdown button. [...]


autofocus bool
True if this widget will be selected as the initial focus when no other node in its scope is currently focused. [...]
disabledHint Widget?
A preferred placeholder widget that is displayed when the dropdown is disabled. [...]
The background color of the dropdown. [...]
elevation int
The z-coordinate at which to place the menu when open. [...]
focusColor Color?
The color for the button's Material when it has the input focus.
focusNode FocusNode?
An optional focus node to use as the focus node for this widget. [...]
hashCode int
The hash code for this object. [...]
@nonVirtual, read-only, inherited
hint Widget?
A placeholder widget that is displayed by the dropdown button. [...]
icon Widget?
The widget to use for the drop-down button's icon. [...]
iconDisabledColor Color?
The color of any Icon descendant of icon if this button is disabled, i.e. if onChanged is null. [...]
iconEnabledColor Color?
The color of any Icon descendant of icon if this button is enabled, i.e. if onChanged is defined. [...]
iconSize double
The size to use for the drop-down button's down arrow icon button. [...]
isDense bool
Reduce the button's height. [...]
isExpanded bool
Set the dropdown's inner contents to horizontally fill its parent. [...]
itemHeight double?
If null, then the menu item heights will vary according to each menu item's intrinsic height. [...]
items List<DropdownMenuItem<T>>?
The list of items the user can select. [...]
key Key?
Controls how one widget replaces another widget in the tree. [...]
final, inherited
onChanged ValueChanged<T?>?
Called when the user selects an item. [...]
onTap VoidCallback?
Called when the dropdown button is tapped. [...]
runtimeType Type
A representation of the runtime type of the object.
read-only, inherited
selectedItemBuilder DropdownButtonBuilder?
A builder to customize the dropdown buttons corresponding to the DropdownMenuItems in items. [...]
style TextStyle?
The text style to use for text in the dropdown button and the dropdown menu that appears when you tap the button. [...]
underline Widget?
The widget to use for drawing the drop-down button's underline. [...]
value → T?
The value of the currently selected DropdownMenuItem. [...]


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


operator ==(Object other) bool
The equality operator. [...]
@nonVirtual, inherited