import 'package:cims_apps/application/theme/color_palette.dart'; import 'package:cims_apps/core/utils/size_config.dart'; import 'package:flutter/material.dart'; class ButtonView extends StatelessWidget { final String name; final VoidCallback onPressed; final Widget? prefixIcon, suffixIcon; final double? height, width, widthSuffix, widthPrefix, marginVertical; final EdgeInsetsGeometry? contentPadding; final bool isSecondaryColor, isOutlined, heightWrapContent, disabled; final Color? backgroundColor, textColor, borderColor; final MainAxisAlignment? mainAxisAlignmentContent; // final _widthBtn = SizeConfig.screenWidth / 1.5; final _widthBtn = SizeConfig.width * .9; // final _heightBtn = SizeConfig.screenHeight / 12; final _heightBtn = SizeConfig.height * .07; final FontWeight textWeight; final TextAlign textAlign; final double? textSize, sizeBorderRadius; final int? maxLines; ButtonView( {super.key, required this.name, required this.onPressed, this.prefixIcon, this.suffixIcon, this.widthPrefix, this.widthSuffix, this.height, this.width, this.contentPadding, this.backgroundColor, this.borderColor, this.textColor, this.textWeight = FontWeight.bold, this.textSize, this.textAlign = TextAlign.center, this.mainAxisAlignmentContent, this.disabled = false, this.heightWrapContent = false, this.isSecondaryColor = false, this.isOutlined = false, this.maxLines = 2, this.sizeBorderRadius, this.marginVertical}) : assert( suffixIcon == null || prefixIcon == null, "Cannot provide both a suffixIcon and a prefixIcon, select one", ); @override Widget build(BuildContext context) { final color = Theme.of(context).colorScheme; final widthSuffix = this.widthSuffix ?? (heightWrapContent ? width! / 4.7 : _widthBtn / 16); final widthPrefix = this.widthPrefix ?? (heightWrapContent ? width! / 4.7 : _widthBtn / 16); return Center( child: Container( margin: EdgeInsets.symmetric(vertical: marginVertical ?? 24.0), width: width ?? _widthBtn, height: heightWrapContent ? null : height ?? _heightBtn, child: ElevatedButton( style: ElevatedButton.styleFrom( disabledBackgroundColor: isOutlined ? Colors.white : color.surface, padding: contentPadding, backgroundColor: backgroundColor ?? (isOutlined ? Colors.white : isSecondaryColor ? ColorPalette.grey : ColorPalette.primary), elevation: 0, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(sizeBorderRadius ?? 48), side: isOutlined ? BorderSide( color: borderColor ?? (disabled ? color.surface : isSecondaryColor ? ColorPalette.greyBorder : ColorPalette.primary), ) : BorderSide.none, ), ), onPressed: disabled ? null : onPressed, child: Row( mainAxisAlignment: mainAxisAlignmentContent ?? (prefixIcon != null ? MainAxisAlignment.center : suffixIcon != null ? MainAxisAlignment.end : MainAxisAlignment.center), children: [ if (prefixIcon != null) ...[ prefixIcon!, SizedBox(width: widthPrefix), ] else Container(), Flexible( child: Text( name, textAlign: textAlign, maxLines: maxLines, overflow: TextOverflow.ellipsis, style: TextStyle( fontSize: textSize ?? 16, fontWeight: textWeight, color: textColor ?? (disabled && isOutlined ? color.primary : disabled ? Colors.white : isOutlined && isSecondaryColor ? ColorPalette.blackFont : isOutlined ? color.primary : isSecondaryColor ? Colors.white : Colors.white), ), ), ), if (suffixIcon != null) ...[ SizedBox(width: widthSuffix), suffixIcon! ] else Container() ], ), ), ), ); } }