You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			97 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Dart
		
	
			
		
		
	
	
			97 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Dart
		
	
| 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,
 | |
|                     ),
 | |
|                   ),
 | |
|                 ),
 | |
|               ),
 | |
|             ],
 | |
|           ),
 | |
|         ));
 | |
|   }
 | |
| }
 |