|
- 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,
- }
|