import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:vbvs_app/common/util/MyUtils.dart';

class ColorChangeOnPress extends StatefulWidget {
  final Color? initialColor; // 初始颜色
  final Color pressColor; // 按下时的颜色
  final bool shouldNavigate; // 是否需要跳转
  final String? routeName; // 路由名称
  final Widget child; // 子组件
  final String? toastMessage; // Toast 消息
  final ToastColor? toastColor; // Toast 颜色
  final double topLeft; // 左上圆角
  final double topRight; // 右上圆角
  final double bottomRight; // 右下圆角
  final double bottomLeft; // 左下圆角
  final VoidCallback? onTap; // 点击回调

  const ColorChangeOnPress({
    Key? key,
    this.initialColor = Colors.white, // 默认初始颜色为白色
    this.pressColor = Colors.grey, // 默认按下颜色为灰色
    this.shouldNavigate = false, // 默认不跳转
    this.routeName,
    required this.child,
    this.toastMessage, // Toast 消息
    this.toastColor, // Toast 颜色
    this.topLeft = 0.0, // 左上圆角
    this.topRight = 0.0, // 右上圆角
    this.bottomRight = 0.0, // 右下圆角
    this.bottomLeft = 0.0, // 左下圆角
    this.onTap, // 点击回调
  }) : super(key: key);

  @override
  _ColorChangeOnPressState createState() => _ColorChangeOnPressState();
}

class _ColorChangeOnPressState extends State<ColorChangeOnPress> {
  Color? _currentColor;

  @override
  void initState() {
    super.initState();
    _currentColor = widget.initialColor; // 初始化为初始颜色
  }

  void _handleTap() {
    // 如果提供了 onTap 回调，调用它
    if (widget.onTap != null) {
      widget.onTap!(); // 执行自定义逻辑
    }

    setState(() {
      _currentColor = widget.pressColor; // 改变为按下的颜色
    });

    // 显示 Toast 消息
    if (widget.toastMessage != null) {
      showToast(widget.toastMessage!, color: widget.toastColor!);
    }

    // 在0.5秒后恢复颜色
    Future.delayed(const Duration(milliseconds: 100), () {
      setState(() {
        _currentColor = widget.initialColor; // 恢复为初始颜色
      });

      // 如果需要跳转，则执行路由跳转
      if (widget.shouldNavigate && widget.routeName != null) {
        Get.toNamed(widget.routeName!); // 在颜色恢复后执行跳转
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      decoration: BoxDecoration(
        color: _currentColor,
        borderRadius: BorderRadius.only(
          topLeft: Radius.circular(widget.topLeft), // 左上圆角
          topRight: Radius.circular(widget.topRight), // 右上圆角
          bottomRight: Radius.circular(widget.bottomRight), // 右下圆角
          bottomLeft: Radius.circular(widget.bottomLeft), // 左下圆角
        ),
      ),
      child: InkWell(
        onTap: _handleTap,
        child: widget.child,
      ),
    );
  }
}
