import 'package:eatvio_app/core/app_export.dart'; import 'package:flutter/material.dart'; class CustomDropDown extends StatelessWidget { CustomDropDown({ Key? key, this.alignment, this.width, this.focusNode, this.icon, this.autofocus = true, this.textStyle, this.items, this.hintText, this.hintStyle, this.prefix, this.prefixConstraints, this.suffix, this.suffixConstraints, this.contentPadding, this.borderDecoration, this.fillColor, this.filled = true, this.validator, this.onChanged, }) : super( key: key, ); final Alignment? alignment; final double? width; final FocusNode? focusNode; final Widget? icon; final bool? autofocus; final TextStyle? textStyle; final List? items; final String? hintText; final TextStyle? hintStyle; final Widget? prefix; final BoxConstraints? prefixConstraints; final Widget? suffix; final BoxConstraints? suffixConstraints; final EdgeInsets? contentPadding; final InputBorder? borderDecoration; final Color? fillColor; final bool? filled; final FormFieldValidator? validator; final Function(SelectionPopupModel)? onChanged; @override Widget build(BuildContext context) { return alignment != null ? Align( alignment: alignment ?? Alignment.center, child: _buildDropDownWidget(context), ) : _buildDropDownWidget(context); } _buildDropDownWidget(BuildContext context) { return SizedBox( width: width ?? double.maxFinite, child: DropdownButtonFormField( focusNode: focusNode ?? FocusNode(), icon: icon, autofocus: autofocus!, style: textStyle ?? Theme.of(context).textTheme.titleMedium, items: items?.map((SelectionPopupModel item) { return DropdownMenuItem( value: item, child: Text( item.title, overflow: TextOverflow.ellipsis, style: hintStyle ?? Theme.of(context).textTheme.titleMedium, ), ); }).toList(), decoration: _buildInputDecoration(context), validator: validator, onChanged: onDropDownChanged, ), ); } void onDropDownChanged(value) { onChanged!(value!); } InputDecoration _buildInputDecoration(BuildContext context) { return InputDecoration( hintText: hintText ?? "", hintStyle: hintStyle ?? Theme.of(context).textTheme.titleMedium, prefixIcon: prefix, prefixIconConstraints: prefixConstraints, suffixIcon: suffix, suffixIconConstraints: suffixConstraints, isDense: true, contentPadding: contentPadding ?? EdgeInsets.only( left: 6, top: 6, bottom: 6, ), fillColor: fillColor ?? Theme.of(context).colorScheme.onPrimary, filled: filled, border: borderDecoration ?? OutlineInputBorder( borderRadius: const BorderRadius.all(Radius.circular(8)), borderSide: BorderSide(color: appTheme.blueA400, width: 1), ), enabledBorder: borderDecoration ?? OutlineInputBorder( borderRadius: const BorderRadius.all(Radius.circular(8)), borderSide: BorderSide(color: appTheme.blueA400, width: 1), ), focusedBorder: borderDecoration ?? OutlineInputBorder( borderRadius: const BorderRadius.all(Radius.circular(8)), borderSide: BorderSide(color: appTheme.blueA400, width: 1), ), ); } }