constantSearchDropdownButtonFormField2 method

Widget constantSearchDropdownButtonFormField2({
  1. required List<DropdownMenuItem<int>> items,
  2. required dynamic selectedValue,
  3. required void onChanged(
    1. Object?
    ),
  4. required TextEditingController searchController,
  5. String? validatorText,
  6. String? hintText,
  7. String? labelText,
  8. Widget? addButtonWidget,
})

Implementation

Widget constantSearchDropdownButtonFormField2({
  required List<DropdownMenuItem<int>> items,
  required dynamic selectedValue,
  required void Function(Object?) onChanged,
  required TextEditingController searchController,
  String? validatorText,
  String? hintText,
  String? labelText,
  Widget? addButtonWidget,
}) {
  return DropdownButtonFormField2(
    searchInnerWidgetHeight: 20,
    autovalidateMode: AutovalidateMode.onUserInteraction,
    decoration: InputDecoration(
      focusedBorder: OutlineInputBorder(
        borderRadius: BorderRadius.circular(10),
        borderSide: BorderSide(color: primaryColor1),
      ),
      enabledBorder: UnderlineInputBorder(
        borderSide: BorderSide(color: transparentColor),
      ),
      contentPadding: EdgeInsets.zero,
      focusedErrorBorder: OutlineInputBorder(
        borderSide: BorderSide(color: transparentColor),
        borderRadius: BorderRadius.circular(10),
      ),
      errorBorder: OutlineInputBorder(
        borderSide: BorderSide(color: transparentColor),
        borderRadius: BorderRadius.circular(10),
      ),
      errorStyle: TextStyle(color: cardColor3, fontSize: 11.5),
    ),
    validator: (value) {
      if (value == null) {
        return '$validatorText can\'t be empty';
      }
      return null;
    },
    scrollbarAlwaysShow: true,
    style: body4,
    itemPadding: const EdgeInsets.symmetric(horizontal: 10),
    hint: Text(
      hintText.toString(),
      style: body4,
    ),
    isDense: true,
    value: selectedValue,
    isExpanded: true,
    onChanged: onChanged,
    items: items,
    buttonElevation: 0,
    scrollbarRadius: const Radius.circular(40),
    searchController: searchController,
    dropdownElevation: 0,
    dropdownMaxHeight: 250,
    scrollbarThickness: 5.0,
    searchMatchFn: (a, searchValue) {
      if (a.child is Text) {
        final textWidget = a.child as Text;
        return textWidget.data.toString().toLowerCase().contains(searchValue);
      }
      return false;
    },
    onMenuStateChange: (isOpen) {
      if (!isOpen) {
        searchController.clear();
      }
    },
    searchInnerWidget: Column(
      mainAxisSize: MainAxisSize.min,
      crossAxisAlignment: CrossAxisAlignment.start,
      mainAxisAlignment: MainAxisAlignment.start,
      children: [
        Padding(
          padding: const EdgeInsets.only(
            top: 10,
            bottom: 8,
            right: 10,
            left: 10,
          ),
          child: TextFormField(
            autovalidateMode: AutovalidateMode.onUserInteraction,
            style: body4,
            controller: searchController,
            decoration: InputDecoration(
              isDense: true,
              labelText: 'Search $labelText',
              labelStyle: body4,
              border: OutlineInputBorder(
                borderRadius: BorderRadius.circular(10),
              ),
              disabledBorder: OutlineInputBorder(
                borderRadius: BorderRadius.circular(10),
                borderSide: BorderSide(
                  color: accentColor3,
                  style: BorderStyle.solid,
                  width: 1,
                ),
              ),
              focusedBorder: OutlineInputBorder(
                borderRadius: BorderRadius.circular(10),
                borderSide: BorderSide(
                  color: accentColor3,
                  width: 1,
                  style: BorderStyle.solid,
                ),
              ),
              enabledBorder: OutlineInputBorder(
                borderRadius: BorderRadius.circular(10),
                borderSide: BorderSide(
                  color: accentColor3,
                  style: BorderStyle.solid,
                  width: 1,
                ),
              ),
            ),
          ),
        ),
        addButtonWidget ?? Container(height: 0),
      ],
    ),
    dropdownDecoration: BoxDecoration(
      borderRadius: BorderRadius.circular(10),
      border: Border.all(width: 1, color: accentColor3),
    ),
    buttonDecoration: BoxDecoration(
      borderRadius: const BorderRadius.all(Radius.circular(10)),
      border: Border.all(width: 1, color: accentColor3),
    ),
    buttonPadding: const EdgeInsets.only(right: 10),
    buttonHeight: 55,
    icon: RotatedBox(
      quarterTurns: 3,
      child: Icon(Icons.chevron_left, color: primaryColor1),
    ),
    iconOnClick: RotatedBox(
      quarterTurns: 1,
      child: Icon(Icons.chevron_left, color: primaryColor1),
    ),
  );
}