64 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
import 'package:flutter/material.dart';
 | 
						|
 | 
						|
class MenuButton extends StatefulWidget {
 | 
						|
  final GestureTapCallback? onPressed;
 | 
						|
  final Color color;
 | 
						|
  final Color hoverColor;
 | 
						|
  final Color? splashColor;
 | 
						|
  final Widget child;
 | 
						|
  final String? tooltip;
 | 
						|
  final EdgeInsetsGeometry padding;
 | 
						|
  final bool enableFeedback;
 | 
						|
  const MenuButton({
 | 
						|
    super.key,
 | 
						|
    required this.onPressed,
 | 
						|
    required this.color,
 | 
						|
    required this.hoverColor,
 | 
						|
    required this.child,
 | 
						|
    this.splashColor,
 | 
						|
    this.tooltip = "",
 | 
						|
    this.padding = const EdgeInsets.symmetric(horizontal: 3, vertical: 6),
 | 
						|
    this.enableFeedback = true,
 | 
						|
  });
 | 
						|
 | 
						|
  @override
 | 
						|
  State<MenuButton> createState() => _MenuButtonState();
 | 
						|
}
 | 
						|
 | 
						|
class _MenuButtonState extends State<MenuButton> {
 | 
						|
  bool _isHover = false;
 | 
						|
  final double _borderRadius = 8.0;
 | 
						|
 | 
						|
  @override
 | 
						|
  Widget build(BuildContext context) {
 | 
						|
    return Padding(
 | 
						|
      padding: widget.padding,
 | 
						|
      child: Tooltip(
 | 
						|
        message: widget.tooltip,
 | 
						|
        child: Material(
 | 
						|
          type: MaterialType.transparency,
 | 
						|
          child: Container(
 | 
						|
            decoration: BoxDecoration(
 | 
						|
              borderRadius: BorderRadius.circular(_borderRadius),
 | 
						|
              color: _isHover ? widget.hoverColor : widget.color,
 | 
						|
            ),
 | 
						|
            child: InkWell(
 | 
						|
              hoverColor: widget.hoverColor,
 | 
						|
              onHover: (val) {
 | 
						|
                setState(() {
 | 
						|
                  _isHover = val;
 | 
						|
                });
 | 
						|
              },
 | 
						|
              borderRadius: BorderRadius.circular(_borderRadius),
 | 
						|
              splashColor: widget.splashColor,
 | 
						|
              enableFeedback: widget.enableFeedback,
 | 
						|
              onTap: widget.onPressed,
 | 
						|
              child: widget.child,
 | 
						|
            ),
 | 
						|
          ),
 | 
						|
        ),
 | 
						|
      ),
 | 
						|
    );
 | 
						|
  }
 | 
						|
}
 |