|  |  |  | import 'package:flutter/material.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/core/app_export.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/core/utils/utils.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class CustomButton extends StatelessWidget { | 
					
						
							|  |  |  |   final String text; | 
					
						
							|  |  |  |   final String? icon; | 
					
						
							|  |  |  |   final VoidCallback onPressed; | 
					
						
							|  |  |  |   final Color backgroundColor; | 
					
						
							|  |  |  |   final Color borderColor; | 
					
						
							|  |  |  |   final Color textColor; | 
					
						
							|  |  |  |   final double? borderRadius; | 
					
						
							|  |  |  |   final double borderWidth; | 
					
						
							|  |  |  |   final EdgeInsetsGeometry padding; | 
					
						
							|  |  |  |   final double? fontSize; | 
					
						
							|  |  |  |   final String? fontFamily; | 
					
						
							|  |  |  |   final FontWeight fontWeight; | 
					
						
							|  |  |  |   final bool isDisabled; | 
					
						
							|  |  |  |   final Color? iconColor; | 
					
						
							|  |  |  |   final double? height; | 
					
						
							|  |  |  |   final double? width; | 
					
						
							|  |  |  |   final double? iconSize; | 
					
						
							|  |  |  |   final TextOverflow? textOverflow; | 
					
						
							|  |  |  |   final BorderSide? borderSide; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const CustomButton({ | 
					
						
							|  |  |  |     super.key, | 
					
						
							|  |  |  |     required this.text, | 
					
						
							|  |  |  |     required this.onPressed, | 
					
						
							|  |  |  |     this.backgroundColor = const Color(0xFFED1C2B), | 
					
						
							|  |  |  |     this.borderColor = const Color(0xFFED1C2B), | 
					
						
							|  |  |  |     this.textColor = Colors.white, | 
					
						
							|  |  |  |     this.borderRadius, | 
					
						
							|  |  |  |     this.borderWidth = 2, | 
					
						
							|  |  |  |     this.padding = const EdgeInsets.fromLTRB(8, 10, 8, 10), | 
					
						
							|  |  |  |     this.fontSize, | 
					
						
							|  |  |  |     this.fontFamily, | 
					
						
							|  |  |  |     this.fontWeight = FontWeight.w500, | 
					
						
							|  |  |  |     this.isDisabled = false, | 
					
						
							|  |  |  |     this.icon, | 
					
						
							|  |  |  |     this.iconColor = Colors.white, | 
					
						
							|  |  |  |     this.height, | 
					
						
							|  |  |  |     this.width, | 
					
						
							|  |  |  |     this.iconSize, | 
					
						
							|  |  |  |     this.textOverflow, | 
					
						
							|  |  |  |     this.borderSide, | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   @override | 
					
						
							|  |  |  |   Widget build(BuildContext context) { | 
					
						
							|  |  |  |     final radius = borderRadius ?? (12.r); | 
					
						
							|  |  |  |     final iconS = iconSize ?? (24.h); | 
					
						
							|  |  |  |     final fontS = fontSize ?? (16.f); | 
					
						
							|  |  |  |     return GestureDetector( | 
					
						
							|  |  |  |         onTap: isDisabled ? null : onPressed, | 
					
						
							|  |  |  |         child: Container( | 
					
						
							|  |  |  |           height: height ?? (56.h), | 
					
						
							|  |  |  |           width: width, | 
					
						
							|  |  |  |           padding: padding, | 
					
						
							|  |  |  |           decoration: RoundedRectangleBorder().toSmoothCornerDecoration( | 
					
						
							|  |  |  |               color: isDisabled ? backgroundColor.withOpacity(.5) : backgroundColor, | 
					
						
							|  |  |  |               borderRadius: radius, | 
					
						
							|  |  |  |               customBorder: BorderRadius.circular(radius), | 
					
						
							|  |  |  |               side: borderSide ?? BorderSide(width: borderWidth.h, color: isDisabled ? borderColor.withValues(alpha: 0.5) : borderColor)), | 
					
						
							|  |  |  |           child: Row( | 
					
						
							|  |  |  |             crossAxisAlignment: CrossAxisAlignment.center, | 
					
						
							|  |  |  |             mainAxisAlignment: MainAxisAlignment.center, | 
					
						
							|  |  |  |             children: [ | 
					
						
							|  |  |  |               if (icon != null) | 
					
						
							|  |  |  |                 Padding( | 
					
						
							|  |  |  |                   padding: text.isNotEmpty ? EdgeInsets.only(right: 8.h, left: 8.h) : EdgeInsets.zero, | 
					
						
							|  |  |  |                   child: Utils.buildSvgWithAssets(icon: icon!, iconColor: iconColor, isDisabled: isDisabled, width: iconS, height: iconS), | 
					
						
							|  |  |  |                 ), | 
					
						
							|  |  |  |               Visibility( | 
					
						
							|  |  |  |                 visible: text.isNotEmpty, | 
					
						
							|  |  |  |                 child: Padding( | 
					
						
							|  |  |  |                   padding: EdgeInsets.only(top: 0), | 
					
						
							|  |  |  |                   child: Text( | 
					
						
							|  |  |  |                     text, | 
					
						
							|  |  |  |                     overflow: textOverflow, | 
					
						
							|  |  |  |                     style: context.dynamicTextStyle( | 
					
						
							|  |  |  |                       fontSize: fontS, | 
					
						
							|  |  |  |                       color: isDisabled ? textColor.withOpacity(0.5) : textColor, | 
					
						
							|  |  |  |                       letterSpacing: 0, | 
					
						
							|  |  |  |                       fontWeight: fontWeight, | 
					
						
							|  |  |  |                     ), | 
					
						
							|  |  |  |                   ), | 
					
						
							|  |  |  |                 ), | 
					
						
							|  |  |  |               ), | 
					
						
							|  |  |  |             ], | 
					
						
							|  |  |  |           ), | 
					
						
							|  |  |  |         )); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } |