import 'package:flutter/material.dart'; import 'package:flutter/material.dart'; import '../Utils/color_constants.dart'; import '../Utils/size_utils.dart'; class CustomIconButton extends StatelessWidget { CustomIconButton( {this.shape, this.padding, this.variant, this.alignment, this.margin, this.width, this.height, this.child, this.onTap}); IconButtonShape? shape; IconButtonPadding? padding; IconButtonVariant? variant; Alignment? alignment; EdgeInsetsGeometry? margin; double? width; double? height; Widget? child; VoidCallback? onTap; @override Widget build(BuildContext context) { return alignment != null ? Align( alignment: alignment ?? Alignment.center, child: _buildIconButtonWidget(), ) : _buildIconButtonWidget(); } _buildIconButtonWidget() { return Padding( padding: margin ?? EdgeInsets.zero, child: IconButton( visualDensity: VisualDensity( vertical: -4, horizontal: -4, ), iconSize: getSize(height ?? 0), padding: EdgeInsets.all(0), icon: Container( alignment: Alignment.center, width: getSize(width ?? 0), height: getSize(height ?? 0), padding: _setPadding(), decoration: _buildDecoration(), child: child, ), onPressed: onTap, ), ); } _buildDecoration() { return BoxDecoration( color: _setColor(), border: _setBorder(), borderRadius: _setBorderRadius(), boxShadow: _setBoxShadow(), ); } _setPadding() { switch (padding) { case IconButtonPadding.PaddingAll4: return getPadding( all: 4, ); case IconButtonPadding.PaddingAll16: return getPadding( all: 16, ); case IconButtonPadding.PaddingAll8: return getPadding( all: 8, ); default: return getPadding( all: 11, ); } } _setColor() { switch (variant) { case IconButtonVariant.FillBlueA700: return ColorConstant.blueA700; case IconButtonVariant.OutlineGray80049: return ColorConstant.whiteA700; case IconButtonVariant.FillGray300: return ColorConstant.gray300; case IconButtonVariant.FillGray100: return ColorConstant.gray100; case IconButtonVariant.FillBlack90001: return ColorConstant.black90001; case IconButtonVariant.OutlineBluegray400: return ColorConstant.whiteA700; case IconButtonVariant.FillBlueA200: return ColorConstant.blueA200; case IconButtonVariant.OutlineBlueA700: case IconButtonVariant.OutlineBlue50: return null; default: return ColorConstant.blue50; } } _setBorder() { switch (variant) { case IconButtonVariant.OutlineBlueA700: return Border.all( color: ColorConstant.blueA700, width: getHorizontalSize( 1.00, ), ); case IconButtonVariant.OutlineGray80049: return Border.all( color: ColorConstant.gray80049, width: getHorizontalSize( 1.00, ), ); case IconButtonVariant.OutlineBlue50: return Border.all( color: ColorConstant.blue50, width: getHorizontalSize( 1.00, ), ); case IconButtonVariant.OutlineBluegray400: return Border.all( color: ColorConstant.blueGray400, width: getHorizontalSize( 1.00, ), ); case IconButtonVariant.FillBlue50: case IconButtonVariant.FillBlueA700: case IconButtonVariant.FillGray300: case IconButtonVariant.FillGray100: case IconButtonVariant.FillBlack90001: case IconButtonVariant.FillBlueA200: return null; default: return null; } } _setBorderRadius() { switch (shape) { case IconButtonShape.CircleBorder15: return BorderRadius.circular( getHorizontalSize( 15.00, ), ); case IconButtonShape.RoundedBorder26: return BorderRadius.circular( getHorizontalSize( 26.00, ), ); case IconButtonShape.CircleBorder10: return BorderRadius.circular( getHorizontalSize( 10.00, ), ); case IconButtonShape.CircleBorder30: return BorderRadius.circular( getHorizontalSize( 30.00, ), ); default: return BorderRadius.circular( getHorizontalSize( 6.00, ), ); } } _setBoxShadow() { switch (variant) { case IconButtonVariant.OutlineBlueA700: return [ BoxShadow( color: ColorConstant.indigoA20033, spreadRadius: getHorizontalSize( 2.00, ), blurRadius: getHorizontalSize( 2.00, ), offset: Offset( 0, 4, ), ), ]; case IconButtonVariant.FillBlue50: case IconButtonVariant.FillBlueA700: case IconButtonVariant.OutlineGray80049: case IconButtonVariant.FillGray300: case IconButtonVariant.FillGray100: case IconButtonVariant.FillBlack90001: case IconButtonVariant.OutlineBlue50: case IconButtonVariant.OutlineBluegray400: case IconButtonVariant.FillBlueA200: return null; default: return null; } } } enum IconButtonShape { RoundedBorder6, CircleBorder15, RoundedBorder26, CircleBorder10, CircleBorder30, } enum IconButtonPadding { PaddingAll4, PaddingAll16, PaddingAll8, PaddingAll11, } enum IconButtonVariant { FillBlue50, FillBlueA700, OutlineBlueA700, OutlineGray80049, FillGray300, FillGray100, FillBlack90001, OutlineBlue50, OutlineBluegray400, FillBlueA200, }