123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- 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),
- ),
- ],
- ),
- ),
- ));
- }
- }
|