import 'package:flutter/material.dart'; import 'package:michele_s_application8/core/app_export.dart'; class CustomButton extends StatelessWidget { CustomButton( {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: _buildButtonChildWidget(), ), ); } _buildButtonChildWidget() { if (checkGradient()) { return Container( width: width ?? double.maxFinite, padding: _setPadding(), decoration: _buildDecoration(), child: _buildButtonWithOrWithoutIcon(), ); } else { return _buildButtonWithOrWithoutIcon(); } } _buildButtonWithOrWithoutIcon() { if (prefixWidget != null || suffixWidget != null) { return Row( mainAxisAlignment: MainAxisAlignment.center, children: [ prefixWidget ?? SizedBox(), Text( text ?? "", textAlign: TextAlign.center, style: _setFontStyle(), ), suffixWidget ?? SizedBox(), ], ); } else { return Text( text ?? "", textAlign: TextAlign.center, style: _setFontStyle(), ); } } _buildDecoration() { return BoxDecoration( borderRadius: _setBorderRadius(), gradient: _setGradient(), boxShadow: _setBoxShadow(), ); } _buildTextButtonStyle() { if (checkGradient()) { return TextButton.styleFrom( padding: EdgeInsets.zero, ); } else { return TextButton.styleFrom( fixedSize: Size( width ?? double.maxFinite, height ?? getVerticalSize(40), ), padding: _setPadding(), shadowColor: _setTextButtonShadowColor(), shape: RoundedRectangleBorder( borderRadius: _setBorderRadius(), ), ); } } _setPadding() { switch (padding) { case ButtonPadding.PaddingAll9: return getPadding( all: 9, ); default: return getPadding( all: 15, ); } } _setTextButtonShadowColor() { switch (variant) { case ButtonVariant.OutlineBlack9003f: return ColorConstant.black9003f; default: return null; } } _setBorderRadius() { switch (shape) { case ButtonShape.Square: return BorderRadius.circular(0); default: return BorderRadius.circular( getHorizontalSize( 14.00, ), ); } } _setFontStyle() { switch (fontStyle) { default: return TextStyle( color: ColorConstant.whiteA700, fontSize: getFontSize( 24, ), fontFamily: 'Roboto', fontWeight: FontWeight.w600, height: getVerticalSize( 1.21, ), ); } } checkGradient() { switch (variant) { case ButtonVariant.OutlineBlack9003f: case ButtonVariant.GradientGray5008eBluegray400af: return true; default: return true; } } _setGradient() { switch (variant) { case ButtonVariant.OutlineBlack9003f: return LinearGradient( begin: Alignment( 0.5, 0, ), end: Alignment( 0.5, 1.11, ), colors: [ ColorConstant.blueA400, ColorConstant.blue600E8, ], ); case ButtonVariant.GradientGray5008eBluegray400af: return LinearGradient( begin: Alignment( 0.5, 0, ), end: Alignment( 0.5, 1, ), colors: [ ColorConstant.gray5008e, ColorConstant.blueGray400Af, ], ); default: return LinearGradient( begin: Alignment( 0.5, 0, ), end: Alignment( 0.5, 1, ), colors: [ ColorConstant.redA7008e, ColorConstant.redA700Af, ], ); } } _setBoxShadow() { switch (variant) { case ButtonVariant.OutlineBlack9003f: return [ BoxShadow( color: ColorConstant.black9003f, spreadRadius: getHorizontalSize( 2.00, ), blurRadius: getHorizontalSize( 2.00, ), offset: Offset( 0, 2.65, ), ) ]; default: return null; } } } enum ButtonShape { Square, RoundedBorder14, } enum ButtonPadding { PaddingAll15, PaddingAll9, } enum ButtonVariant { GradientRedA7008eRedA700af, OutlineBlack9003f, GradientGray5008eBluegray400af, } enum ButtonFontStyle { RobotoRomanSemiBold24, }