toDropdown method

Widget toDropdown({
  1. required BuildContext context,
  2. void onChanged(
    1. T? selectedItem
    )?,
  3. T? selectedItem,
  4. String emptyMessage = "No items available",
  5. Widget? hint,
  6. bool enableSearch = false,
  7. InputDecoration? searchFieldDecoration,
  8. Widget? icon,
  9. bool isExpanded = true,
  10. bool isDense = false,
  11. Color? dropdownColor,
  12. EdgeInsets? padding,
  13. double? dropdownMaxHeight,
  14. TextStyle? style,
  15. FocusNode? focusNode,
  16. DropdownButtonStyle? dropdownButtonStyle,
  17. DropdownButtonFormFieldStyle? dropdownFormFieldStyle,
  18. bool useFormField = false,
  19. Widget itemBuilder(
    1. BuildContext context,
    2. T item
    )?,
  20. Widget selectedItemBuilder(
    1. 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,
  );
}