import 'package:auto_size_text/auto_size_text.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../../common.dart'; class Button extends StatefulWidget { final GestureTapCallback onTap; final String text; final double? textSize; final double? minWidth; final bool isOutline; final double? padding; final Color? textColor; final double? radius; final Color? borderColor; Button({ Key? key, this.minWidth, this.isOutline = false, this.textSize, this.padding, this.textColor, this.radius, this.borderColor, required this.onTap, required this.text, }) : super(key: key); @override State<Button> createState() => _ButtonState(); } class _ButtonState extends State<Button> { RxBool hover = false.obs; RxBool pressed = false.obs; @override Widget build(BuildContext context) { return Obx(() => InkWell( onTapDown: (_) => pressed.value = true, onTapUp: (_) => pressed.value = false, onTapCancel: () => pressed.value = false, onHover: (value) => hover.value = value, onTap: widget.onTap, child: ConstrainedBox( constraints: BoxConstraints( minWidth: widget.minWidth ?? 70.0, ), child: Container( padding: EdgeInsets.all(widget.padding ?? 4.5), alignment: Alignment.center, decoration: BoxDecoration( color: pressed.value ? MyTheme.accent : (widget.isOutline ? Colors.transparent : MyTheme.button), border: Border.all( color: pressed.value ? MyTheme.accent : hover.value ? MyTheme.hoverBorder : (widget.isOutline ? widget.borderColor ?? MyTheme.border : MyTheme.button), ), borderRadius: BorderRadius.circular(widget.radius ?? 5), ), child: Text( translate( widget.text, ), style: TextStyle( fontSize: widget.textSize ?? 12.0, color: widget.isOutline ? widget.textColor ?? Theme.of(context).textTheme.titleLarge?.color : Colors.white), ).marginSymmetric(horizontal: 12), )), )); } } class FixedWidthButton extends StatefulWidget { final GestureTapCallback onTap; final String text; final double? textSize; final double width; final bool isOutline; final double? padding; final Color? textColor; final double? radius; final Color? borderColor; final int? maxLines; FixedWidthButton({ Key? key, required this.width, this.maxLines, this.isOutline = false, this.textSize, this.padding, this.textColor, this.radius, this.borderColor, required this.onTap, required this.text, }) : super(key: key); @override State<FixedWidthButton> createState() => _FixedWidthButtonState(); } class _FixedWidthButtonState extends State<FixedWidthButton> { RxBool hover = false.obs; RxBool pressed = false.obs; @override Widget build(BuildContext context) { return Obx(() => InkWell( onTapDown: (_) => pressed.value = true, onTapUp: (_) => pressed.value = false, onTapCancel: () => pressed.value = false, onHover: (value) => hover.value = value, onTap: widget.onTap, child: Container( width: widget.width, padding: EdgeInsets.all(widget.padding ?? 4.5), alignment: Alignment.center, decoration: BoxDecoration( color: pressed.value ? MyTheme.accent : (widget.isOutline ? Colors.transparent : MyTheme.button), border: Border.all( color: pressed.value ? MyTheme.accent : hover.value ? MyTheme.hoverBorder : (widget.isOutline ? widget.borderColor ?? MyTheme.border : MyTheme.button), ), borderRadius: BorderRadius.circular(widget.radius ?? 5), ), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Flexible( child: AutoSizeText( translate( widget.text, ), maxLines: widget.maxLines ?? 1, textAlign: TextAlign.center, style: TextStyle( fontSize: widget.textSize ?? 12.0, color: widget.isOutline ? widget.textColor ?? Theme.of(context).textTheme.titleLarge?.color : Colors.white), ).marginSymmetric(horizontal: 12), ), ], ), ), )); } }