import 'package:flutter/material.dart'; import '../utils/color_constants.dart'; import '../utils/size_utils.dart'; class CustomDropDown extends StatelessWidget { CustomDropDown( {super.key, this.shape, this.padding, this.variant, this.fontStyle, this.alignment, this.width, this.margin, this.focusNode, this.icon, this.hintText, this.prefix, this.prefixConstraints, this.items, this.onChanged, this.validator}); DropDownShape? shape; DropDownPadding? padding; DropDownVariant? variant; DropDownFontStyle? fontStyle; Alignment? alignment; double? width; EdgeInsetsGeometry? margin; FocusNode? focusNode; Widget? icon; String? hintText; Widget? prefix; BoxConstraints? prefixConstraints; List? items; Function(String)? onChanged; FormFieldValidator? validator; @override Widget build(BuildContext context) { return alignment != null ? Align( alignment: alignment ?? Alignment.center, child: _buildDropDownWidget(), ) : _buildDropDownWidget(); } _buildDropDownWidget() { return Container( width: width ?? double.maxFinite, margin: margin, child: DropdownButtonFormField( focusNode: focusNode, icon: icon, style: _setFontStyle(), decoration: _buildDecoration(), items: items?.map>((String value) { return DropdownMenuItem( value: value, child: Text( value, overflow: TextOverflow.ellipsis, ), ); }).toList(), onChanged: (value) { onChanged!(value.toString()); }, validator: validator, ), ); } _buildDecoration() { return InputDecoration( hintText: hintText ?? "", hintStyle: _setFontStyle(), border: _setBorderStyle(), enabledBorder: _setBorderStyle(), focusedBorder: _setBorderStyle(), prefixIcon: prefix, prefixIconConstraints: prefixConstraints, fillColor: _setFillColor(), filled: _setFilled(), isDense: true, contentPadding: _setPadding(), ); } _setFontStyle() { switch (fontStyle) { case DropDownFontStyle.GilroyRegular16: return TextStyle( color: ColorConstant.blueGray200, fontSize: getFontSize( 16, ), fontFamily: 'Gilroy', fontWeight: FontWeight.w400, ); default: return TextStyle( color: ColorConstant.blueGray900, fontSize: getFontSize( 16, ), fontFamily: 'Gilroy', fontWeight: FontWeight.w600, ); } } _setOutlineBorderRadius() { switch (shape) { default: return BorderRadius.circular( getHorizontalSize( 6.00, ), ); } } _setBorderStyle() { switch (variant) { case DropDownVariant.None: return InputBorder.none; default: return OutlineInputBorder( borderRadius: _setOutlineBorderRadius(), borderSide: BorderSide( color: ColorConstant.blueGray100, width: 1, ), ); } } _setFillColor() { switch (variant) { default: return ColorConstant.whiteA700; } } _setFilled() { switch (variant) { case DropDownVariant.None: return false; default: return true; } } _setPadding() { switch (padding) { default: return getPadding( left: 10, top: 10, bottom: 10, ); } } } enum DropDownShape { RoundedBorder6, } enum DropDownPadding { PaddingT10, } enum DropDownVariant { None, OutlineBluegray100, } enum DropDownFontStyle { GilroySemiBold16, GilroyRegular16, }