toDropdown method
Widget
toDropdown({
- required BuildContext context,
- void onChanged(
- T? selectedItem
- T? selectedItem,
- String emptyMessage = "No items available",
- Widget? hint,
- bool enableSearch = false,
- InputDecoration? searchFieldDecoration,
- Widget? icon,
- bool isExpanded = true,
- bool isDense = false,
- Color? dropdownColor,
- EdgeInsets? padding,
- double? dropdownMaxHeight,
- TextStyle? style,
- FocusNode? focusNode,
- DropdownButtonStyle? dropdownButtonStyle,
- DropdownButtonFormFieldStyle? dropdownFormFieldStyle,
- bool useFormField = false,
- Widget itemBuilder(
- BuildContext context,
- T item
- Widget selectedItemBuilder(
- T? selectedItem
Converts a nullable list into a fully-featured dropdown with extensive options
Implementation
Widget toDropdown({
required BuildContext context,
void Function(T? selectedItem)? onChanged,
T? selectedItem,
String emptyMessage = "No items available",
Widget? hint,
bool enableSearch = false,
InputDecoration? searchFieldDecoration,
Widget? icon,
bool isExpanded = true,
bool isDense = false,
Color? dropdownColor,
EdgeInsets? padding,
double? dropdownMaxHeight,
TextStyle? style,
FocusNode? focusNode,
DropdownButtonStyle? dropdownButtonStyle,
DropdownButtonFormFieldStyle? dropdownFormFieldStyle,
bool useFormField = false,
Widget Function(BuildContext context, T item)? itemBuilder,
Widget Function(T? selectedItem)? selectedItemBuilder,
}) {
if (this == null || this!.isEmpty) {
return DropdownButton<T>(
value: null,
items: [],
hint: hint ?? Text(emptyMessage),
isExpanded: isExpanded,
onChanged: null,
icon: icon ?? Icon(Icons.arrow_drop_down),
style: style,
);
}
if (enableSearch) {
return _buildSearchableDropdown(
context: context,
itemBuilder: itemBuilder,
onChanged: onChanged,
selectedItem: selectedItem,
searchFieldDecoration: searchFieldDecoration,
dropdownColor: dropdownColor,
padding: padding,
dropdownMaxHeight: dropdownMaxHeight,
selectedItemBuilder: selectedItemBuilder,
);
}
return useFormField
? DropdownButtonFormField<T>(
value: selectedItem,
items: _buildDropdownItems(context, itemBuilder, padding),
onChanged: onChanged,
decoration: dropdownFormFieldStyle?.inputDecoration ??
const InputDecoration(),
style: style,
focusNode: focusNode,
dropdownColor: dropdownColor,
isExpanded: isExpanded,
icon: icon ?? Icon(Icons.arrow_drop_down),
)
: DropdownButton<T>(
value: selectedItem,
items: _buildDropdownItems(context, itemBuilder, padding),
onChanged: onChanged,
hint: hint,
isExpanded: isExpanded,
dropdownColor: dropdownColor,
isDense: isDense,
icon: icon ?? Icon(Icons.arrow_drop_down),
style: style,
focusNode: focusNode,
selectedItemBuilder: selectedItemBuilder != null
? (context) => this!.map((item) {
return selectedItemBuilder(item);
}).toList()
: null,
);
}