FormBuilderDropdown<T> constructor

FormBuilderDropdown<T>({
  1. Key? key,
  2. required String name,
  3. FormFieldValidator<T>? validator,
  4. T? initialValue,
  5. InputDecoration decoration = const InputDecoration(),
  6. ValueChanged<T?>? onChanged,
  7. ValueTransformer<T?>? valueTransformer,
  8. bool enabled = true,
  9. FormFieldSetter<T>? onSaved,
  10. AutovalidateMode? autovalidateMode = AutovalidateMode.disabled,
  11. VoidCallback? onReset,
  12. FocusNode? focusNode,
  13. required List<DropdownMenuItem<T>> items,
  14. bool isExpanded = true,
  15. bool isDense = true,
  16. int elevation = 8,
  17. double iconSize = 24.0,
  18. @Deprecated('Please use decoration.hint and variations to set your desired label') Widget? hint,
  19. TextStyle? style,
  20. Widget? disabledHint,
  21. Widget? icon,
  22. Color? iconDisabledColor,
  23. Color? iconEnabledColor,
  24. @Deprecated('Please use decoration.suffix to set your desired behavior') bool allowClear = false,
  25. @Deprecated('Please use decoration.suffixIcon to set your desired icon') Widget clearIcon = const Icon(Icons.close),
  26. VoidCallback? onTap,
  27. bool autofocus = false,
  28. bool shouldRequestFocus = false,
  29. Color? dropdownColor,
  30. Color? focusColor,
  31. double? itemHeight,
  32. DropdownButtonBuilder? selectedItemBuilder,
  33. double? menuMaxHeight,
  34. bool? enableFeedback,
  35. BorderRadius? borderRadius,
  36. AlignmentGeometry alignment = AlignmentDirectional.centerStart,
})

Creates field for Dropdown button

Implementation

FormBuilderDropdown({
  super.key,
  required super.name,
  super.validator,
  super.initialValue,
  super.decoration,
  super.onChanged,
  super.valueTransformer,
  super.enabled,
  super.onSaved,
  super.autovalidateMode = AutovalidateMode.disabled,
  super.onReset,
  super.focusNode,
  required this.items,
  this.isExpanded = true,
  this.isDense = true,
  this.elevation = 8,
  this.iconSize = 24.0,
  @Deprecated('Please use decoration.hint and variations to set your desired label')
      this.hint,
  this.style,
  this.disabledHint,
  this.icon,
  this.iconDisabledColor,
  this.iconEnabledColor,
  @Deprecated('Please use decoration.suffix to set your desired behavior')
      this.allowClear = false,
  @Deprecated('Please use decoration.suffixIcon to set your desired icon')
      this.clearIcon = const Icon(Icons.close),
  this.onTap,
  this.autofocus = false,
  this.shouldRequestFocus = false,
  this.dropdownColor,
  this.focusColor,
  this.itemHeight,
  this.selectedItemBuilder,
  this.menuMaxHeight,
  this.enableFeedback,
  this.borderRadius,
  this.alignment = AlignmentDirectional.centerStart,
}) : super(
        builder: (FormFieldState<T?> field) {
          final state = field as _FormBuilderDropdownState<T>;

          void changeValue(T? value) {
            if (shouldRequestFocus) {
              state.requestFocus();
            }
            state.didChange(value);
          }

          return InputDecorator(
            decoration: state.decoration,
            isEmpty: state.value == null,
            child: DropdownButtonHideUnderline(
              child: DropdownButton<T>(
                isExpanded: isExpanded,
                hint: hint,
                items: items,
                value: field.value,
                style: style,
                isDense: isDense,
                disabledHint: field.value != null
                    ? (items
                            .firstWhereOrNull((dropDownItem) =>
                                dropDownItem.value == field.value)
                            ?.child ??
                        Text(field.value.toString()))
                    : disabledHint,
                elevation: elevation,
                iconSize: iconSize,
                icon: icon,
                iconDisabledColor: iconDisabledColor,
                iconEnabledColor: iconEnabledColor,
                onChanged:
                    state.enabled ? (value) => changeValue(value) : null,
                onTap: onTap,
                focusNode: state.effectiveFocusNode,
                autofocus: autofocus,
                dropdownColor: dropdownColor,
                focusColor: focusColor,
                itemHeight: itemHeight,
                selectedItemBuilder: selectedItemBuilder,
                menuMaxHeight: menuMaxHeight,
                borderRadius: borderRadius,
                enableFeedback: enableFeedback,
                alignment: alignment,
              ),
            ),
          );
        },
      );