import 'package:flutter/material.dart'; import 'package:rluv/global/styles.dart'; import 'package:rluv/global/utils.dart'; class UiButton extends StatefulWidget { const UiButton({ super.key, required this.text, this.color = Styles.deepPurpleNurple, required this.onPressed, this.height, this.width, this.icon, this.showLoading = false, }); final String text; final Function? onPressed; final Color color; final double? width; final double? height; final Icon? icon; final bool showLoading; @override State createState() => _UiButtonState(); } class _UiButtonState extends State { final double borderRadius = 12.0; bool loading = false; @override Widget build(BuildContext context) { final computedColor = widget.onPressed == null ? Styles.disabledButton : widget.color; final brightness = getBrightness(computedColor); return SizedBox( width: widget.width, height: widget.height, child: Padding( padding: const EdgeInsets.all(8.0), child: InkWell( borderRadius: BorderRadius.circular(borderRadius), onTap: widget.onPressed == null || loading ? null : widget.showLoading ? () async { setState(() => loading = true); await widget.onPressed!(); setState(() => loading = false); } : () => widget.onPressed!(), child: Container( decoration: BoxDecoration( color: computedColor, boxShadow: const [ BoxShadow( color: Colors.black26, blurRadius: 2.0, spreadRadius: 2.0, offset: Offset(2.5, 2.5), ) ], borderRadius: BorderRadius.circular(borderRadius), ), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: loading ? [ Padding( padding: const EdgeInsets.all(4.0), child: SizedBox( height: 26, width: 26, child: CircularProgressIndicator( strokeWidth: 2.0, color: brightness == Brightness.dark ? Styles.lavender : Styles.electricBlue)), ), ] : [ if (widget.icon != null) widget.icon!, Padding( padding: const EdgeInsets.all(8.0), child: Text( widget.text, style: TextStyle( fontSize: 16, fontWeight: FontWeight.w600, color: widget.onPressed == null ? Styles.disabledButtonText : brightness == Brightness.dark ? Styles.washedStone : Colors.black87, ), ), ), ], ), ), ), ), ); } }