import 'package:dotted_border/dotted_border.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; class PrimaryButton extends StatelessWidget { const PrimaryButton( {required this.text, required this.color, required this.textColor, this.onPressed, this.isDisabled = false, this.isDottedBorder = false, this.borderColor = Colors.black, this.onDisabledPressed}); final VoidCallback? onPressed; final VoidCallback? onDisabledPressed; final Color color; final Color textColor; final Color borderColor; final String text; final bool isDisabled; final bool isDottedBorder; @override Widget build(BuildContext context) { final content = SizedBox( width: double.infinity, height: 52.0, child: TextButton( onPressed: isDisabled ? (onDisabledPressed != null ? onDisabledPressed : null) : onPressed, style: ButtonStyle(backgroundColor: MaterialStateProperty.all(isDisabled ? color.withOpacity(0.5) : color), shape: MaterialStateProperty.all( RoundedRectangleBorder( borderRadius: BorderRadius.circular(26.0), ), ), overlayColor: MaterialStateProperty.all(Colors.transparent)), child: Text(text, textAlign: TextAlign.center, style: TextStyle( fontSize: 15.0, fontWeight: FontWeight.w600, color: isDisabled ? textColor.withOpacity(0.5) : textColor)), )); return isDottedBorder ? DottedBorder( borderType: BorderType.RRect, dashPattern: [6, 4], color: borderColor, strokeWidth: 2, radius: Radius.circular(26), child: content) : content; } } class LoadingPrimaryButton extends StatelessWidget { const LoadingPrimaryButton( {required this.onPressed, required this.text, required this.color, required this.textColor, this.isDisabled = false, this.isLoading = false}); final VoidCallback onPressed; final Color color; final Color textColor; final bool isLoading; final bool isDisabled; final String text; @override Widget build(BuildContext context) { return SizedBox( width: double.infinity, height: 52.0, child: TextButton( onPressed: (isLoading || isDisabled) ? null : onPressed, style: ButtonStyle(backgroundColor: MaterialStateProperty.all(isDisabled ? color.withOpacity(0.5) : color), shape: MaterialStateProperty.all( RoundedRectangleBorder( borderRadius: BorderRadius.circular(26.0), ), )), child: isLoading ? CupertinoActivityIndicator(animating: true) : Text(text, style: TextStyle( fontSize: 15.0, fontWeight: FontWeight.w600, color: isDisabled ? textColor.withOpacity(0.5) : textColor )), )); } } class PrimaryIconButton extends StatelessWidget { const PrimaryIconButton({ required this.onPressed, required this.iconData, required this.text, required this.color, required this.borderColor, required this.iconColor, required this.iconBackgroundColor, required this.textColor, this.mainAxisAlignment = MainAxisAlignment.start, this.radius = 26 }); final VoidCallback onPressed; final IconData iconData; final Color color; final Color borderColor; final Color iconColor; final Color iconBackgroundColor; final String text; final MainAxisAlignment mainAxisAlignment; final Color textColor; final double radius; @override Widget build(BuildContext context) { return SizedBox( width: double.infinity, height: 52.0, child: TextButton( onPressed: onPressed, style: ButtonStyle(backgroundColor: MaterialStateProperty.all(color), shape: MaterialStateProperty.all( RoundedRectangleBorder( borderRadius: BorderRadius.circular(radius), ), )), child: Stack( children: [ Row( mainAxisAlignment: mainAxisAlignment, children: [ Container( width: 26.0, height: 52.0, decoration: BoxDecoration( shape: BoxShape.circle, color: iconBackgroundColor), child: Center( child: Icon(iconData, color: iconColor, size: 22.0) ), ), ], ), Container( height: 52.0, child: Center( child: Text(text, style: TextStyle( fontSize: 16.0, color: textColor)), ), ) ], ), )); } } class PrimaryImageButton extends StatelessWidget { const PrimaryImageButton( {required this.onPressed, required this.image, required this.text, required this.color, required this.textColor, this.borderColor = Colors.transparent}); final VoidCallback onPressed; final Image image; final Color color; final Color textColor; final Color borderColor; final String text; @override Widget build(BuildContext context) { return SizedBox( width: double.infinity, height: 52.0, child: TextButton( onPressed: onPressed, style: ButtonStyle(backgroundColor: MaterialStateProperty.all(color), shape: MaterialStateProperty.all( RoundedRectangleBorder( borderRadius: BorderRadius.circular(26.0), ), )), child:Center( child: Row( mainAxisSize: MainAxisSize.min, children: [ image, SizedBox(width: 15), Text( text, style: TextStyle( fontSize: 15, fontWeight: FontWeight.w600, color: textColor ), ) ], ), ) )); } }