352 lines
8.1 KiB
Dart
Raw Permalink Normal View History

2025-09-06 19:21:52 +05:30
import 'package:flutter/material.dart';
import '../utils/color_constants.dart';
import '../utils/size_utils.dart';
class CustomButton extends StatelessWidget {
CustomButton(
{super.key, this.shape,
this.padding,
this.variant,
this.fontStyle,
this.alignment,
this.margin,
this.onTap,
this.width,
this.height,
this.text,
this.prefixWidget,
this.suffixWidget});
ButtonShape? shape;
ButtonPadding? padding;
ButtonVariant? variant;
ButtonFontStyle? fontStyle;
Alignment? alignment;
EdgeInsetsGeometry? margin;
VoidCallback? onTap;
double? width;
double? height;
String? text;
Widget? prefixWidget;
Widget? suffixWidget;
@override
Widget build(BuildContext context) {
return alignment != null
? Align(
alignment: alignment!,
child: _buildButtonWidget(),
)
: _buildButtonWidget();
}
_buildButtonWidget() {
return Padding(
padding: margin ?? EdgeInsets.zero,
child: TextButton(
onPressed: onTap,
style: _buildTextButtonStyle(),
child: _buildButtonWithOrWithoutIcon(),
),
);
}
_buildButtonWithOrWithoutIcon() {
if (prefixWidget != null || suffixWidget != null) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
prefixWidget ?? const SizedBox(),
Text(
text ?? "",
textAlign: TextAlign.center,
style: _setFontStyle(),
),
suffixWidget ?? const SizedBox(),
],
);
} else {
return Text(
text ?? "",
textAlign: TextAlign.center,
style: _setFontStyle(),
);
}
}
_buildTextButtonStyle() {
return TextButton.styleFrom(
fixedSize: Size(
width ?? double.maxFinite,
height ?? getVerticalSize(40),
),
padding: _setPadding(),
backgroundColor: _setColor(),
side: _setTextButtonBorder(),
shape: RoundedRectangleBorder(
borderRadius: _setBorderRadius(),
),
);
}
_setPadding() {
switch (padding) {
case ButtonPadding.PaddingT14:
return getPadding(
top: 14,
right: 14,
bottom: 14,
);
case ButtonPadding.PaddingT7:
return getPadding(
top: 7,
right: 7,
bottom: 7,
);
case ButtonPadding.PaddingAll7:
return getPadding(
all: 7,
);
case ButtonPadding.PaddingAll3:
return getPadding(
all: 3,
);
default:
return getPadding(
all: 14,
);
}
}
_setColor() {
switch (variant) {
case ButtonVariant.FillBlue50:
return ColorConstant.blue50;
case ButtonVariant.FillDeeporangeA10033:
return ColorConstant.deepOrangeA10033;
case ButtonVariant.FillGray10001:
return ColorConstant.gray10001;
case ButtonVariant.FillLightblue100:
return ColorConstant.lightBlue100;
case ButtonVariant.FillRed200:
return ColorConstant.red200;
case ButtonVariant.FillGreenA100:
return ColorConstant.greenA100;
case ButtonVariant.FillBlueA200:
return ColorConstant.blueA200;
case ButtonVariant.FillBluegray50:
return ColorConstant.blueGray50;
case ButtonVariant.OutlineBlueA700:
return null;
default:
return ColorConstant.blueA700;
}
}
_setTextButtonBorder() {
switch (variant) {
case ButtonVariant.OutlineBlueA700:
return BorderSide(
color: ColorConstant.blueA700,
width: getHorizontalSize(
1.00,
),
);
case ButtonVariant.FillBlueA700:
case ButtonVariant.FillBlue50:
case ButtonVariant.FillDeeporangeA10033:
case ButtonVariant.FillGray10001:
case ButtonVariant.FillLightblue100:
case ButtonVariant.FillRed200:
case ButtonVariant.FillGreenA100:
case ButtonVariant.FillBlueA200:
case ButtonVariant.FillBluegray50:
return null;
default:
return null;
}
}
_setBorderRadius() {
switch (shape) {
case ButtonShape.RoundedBorder2:
return BorderRadius.circular(
getHorizontalSize(
2.00,
),
);
case ButtonShape.RoundedBorder16:
return BorderRadius.circular(
getHorizontalSize(
16.00,
),
);
case ButtonShape.Square:
return BorderRadius.circular(0);
default:
return BorderRadius.circular(
getHorizontalSize(
6.00,
),
);
}
}
_setFontStyle() {
switch (fontStyle) {
case ButtonFontStyle.GilroyMedium14:
return TextStyle(
color: ColorConstant.blueA700,
fontSize: getFontSize(
14,
),
fontFamily: 'Gilroy',
fontWeight: FontWeight.w500,
);
case ButtonFontStyle.GilroyMedium14WhiteA700:
return TextStyle(
color: ColorConstant.whiteA700,
fontSize: getFontSize(
14,
),
fontFamily: 'Gilroy',
fontWeight: FontWeight.w500,
);
case ButtonFontStyle.GilroyMedium16Black900:
return TextStyle(
color: ColorConstant.black900,
fontSize: getFontSize(
16,
),
fontFamily: 'Gilroy',
fontWeight: FontWeight.w500,
);
case ButtonFontStyle.SFUIDisplayBold12:
return TextStyle(
color: ColorConstant.whiteA700,
fontSize: getFontSize(
12,
),
fontFamily: 'SF UI Display',
fontWeight: FontWeight.w700,
);
case ButtonFontStyle.GilroyMedium16BlueA700:
return TextStyle(
color: ColorConstant.blueA700,
fontSize: getFontSize(
16,
),
fontFamily: 'Gilroy',
fontWeight: FontWeight.w500,
);
case ButtonFontStyle.GilroyMedium12:
return TextStyle(
color: ColorConstant.deepOrange400,
fontSize: getFontSize(
12,
),
fontFamily: 'Gilroy',
fontWeight: FontWeight.w500,
);
case ButtonFontStyle.GilroyMedium12Red700:
return TextStyle(
color: ColorConstant.red700,
fontSize: getFontSize(
12,
),
fontFamily: 'Gilroy',
fontWeight: FontWeight.w500,
);
case ButtonFontStyle.InterSemiBold10:
return TextStyle(
color: ColorConstant.black90001,
fontSize: getFontSize(
10,
),
fontFamily: 'Inter',
fontWeight: FontWeight.w600,
);
case ButtonFontStyle.RobotoMedium14:
return TextStyle(
color: ColorConstant.whiteA700,
fontSize: getFontSize(
14,
),
fontFamily: 'Roboto',
fontWeight: FontWeight.w500,
);
case ButtonFontStyle.InterRegular14:
return TextStyle(
color: ColorConstant.blueGray400,
fontSize: getFontSize(
14,
),
fontFamily: 'Inter',
fontWeight: FontWeight.w400,
);
default:
return TextStyle(
color: ColorConstant.whiteA700,
fontSize: getFontSize(
16,
),
fontFamily: 'Gilroy',
fontWeight: FontWeight.w500,
);
}
}
}
enum ButtonShape {
Square,
RoundedBorder6,
RoundedBorder2,
RoundedBorder16,
}
enum ButtonPadding {
PaddingAll14,
PaddingT14,
PaddingT7,
PaddingAll7,
PaddingAll3,
}
enum ButtonVariant {
FillBlueA700,
OutlineBlueA700,
FillBlue50,
FillDeeporangeA10033,
FillGray10001,
FillLightblue100,
FillRed200,
FillGreenA100,
FillBlueA200,
FillBluegray50,
}
enum ButtonFontStyle {
GilroyMedium16,
GilroyMedium14,
GilroyMedium14WhiteA700,
GilroyMedium16Black900,
SFUIDisplayBold12,
GilroyMedium16BlueA700,
GilroyMedium12,
GilroyMedium12Red700,
InterSemiBold10,
RobotoMedium14,
InterRegular14,
}