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.onPressed, @required this.text, @required this.color, @required this.textColor, 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 = ButtonTheme( minWidth: double.infinity, height: 52.0, child: FlatButton( onPressed: isDisabled ? (onDisabledPressed != null ? onDisabledPressed : null) : onPressed, color: isDisabled ? color.withOpacity(0.5) : color, splashColor: Colors.transparent, highlightColor: Colors.transparent, disabledColor: color.withOpacity(0.5), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(26.0), ), 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 ButtonTheme( minWidth: double.infinity, height: 52.0, child: FlatButton( onPressed: (isLoading || isDisabled) ? null : onPressed, color: color, disabledColor: color.withOpacity(0.5), shape: 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 ButtonTheme( minWidth: double.infinity, height: 52.0, child: FlatButton( onPressed: onPressed, color: color, shape: RoundedRectangleBorder( side: BorderSide(color: borderColor), 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 ButtonTheme( minWidth: double.infinity, height: 52.0, child: FlatButton( onPressed: onPressed, color: color, shape: RoundedRectangleBorder( side: BorderSide(color: borderColor), 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 ), ) ], ), ) )); } }