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: dropDownWidget, ) : dropDownWidget; } Widget get dropDownWidget => SizedBox( width: width ?? double.maxFinite, child: DropdownButtonFormField( focusNode: focusNode ?? FocusNode(), icon: icon, autofocus: autofocus!, style: textStyle ?? theme.textTheme.titleMedium, items: items?.map((SelectionPopupModel item) { return DropdownMenuItem( value: item, child: Text( item.title, overflow: TextOverflow.ellipsis, style: hintStyle ?? theme.textTheme.titleMedium, ), ); }).toList(), decoration: decoration, validator: validator, onChanged: (value) { onChanged!(value!); }, ), ); InputDecoration get decoration => InputDecoration( hintText: hintText ?? "", hintStyle: hintStyle ?? theme.textTheme.titleMedium, prefixIcon: prefix, prefixIconConstraints: prefixConstraints, suffixIcon: suffix, suffixIconConstraints: suffixConstraints, isDense: true, contentPadding: contentPadding ?? EdgeInsets.only( left: 6.h, top: 6.v, bottom: 6.v, ), fillColor: fillColor ?? theme.colorScheme.onPrimary, filled: filled, border: borderDecoration ?? OutlineInputBorder( borderRadius: BorderRadius.circular(8.h), borderSide: BorderSide( color: appTheme.blueA400, width: 1, ), ), enabledBorder: borderDecoration ?? OutlineInputBorder( borderRadius: BorderRadius.circular(8.h), borderSide: BorderSide( color: appTheme.blueA400, width: 1, ), ), focusedBorder: borderDecoration ?? OutlineInputBorder( borderRadius: BorderRadius.circular(8.h), borderSide: BorderSide( color: appTheme.blueA400, width: 1, ), ), ); }