2025-03-21 09:10:43 +05:30

200 lines
3.9 KiB
Dart

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<String>? items;
Function(String)? onChanged;
FormFieldValidator<String>? 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<DropdownMenuItem<String>>((String value) {
return DropdownMenuItem<String>(
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,
}