| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 | import 'package:flutter/material.dart';// ignore: unused_importimport 'package:flowy_infra/time/duration.dart';typedef HoverBuilder = Widget Function(BuildContext context, bool onHover);class FlowyHover extends StatefulWidget {  final HoverDisplayConfig config;  final HoverBuilder builder;  const FlowyHover({    Key? key,    required this.builder,    this.config = const HoverDisplayConfig(),  }) : super(key: key);  @override  State<FlowyHover> createState() => _FlowyHoverState();}class _FlowyHoverState extends State<FlowyHover> {  bool _onHover = false;  @override  Widget build(BuildContext context) {    final hoverColor = _onHover        ? widget.config.hoverColor        : Theme.of(context).colorScheme.background;    final config = widget.config.copyWith(hoverColor: hoverColor);    return MouseRegion(      cursor: SystemMouseCursors.click,      onEnter: (p) => setOnHover(true),      onExit: (p) => setOnHover(false),      child: FlowyHoverBackground(          config: config, child: widget.builder(context, _onHover)),    );  }  void setOnHover(bool value) => setState(() => _onHover = value);}class HoverDisplayConfig {  final Color borderColor;  final double borderWidth;  final Color? hoverColor;  final BorderRadius borderRadius;  const HoverDisplayConfig(      {this.borderColor = Colors.transparent,      this.borderWidth = 0,      this.borderRadius = const BorderRadius.all(Radius.circular(8)),      this.hoverColor});  HoverDisplayConfig copyWith({Color? hoverColor}) {    return HoverDisplayConfig(        borderColor: borderColor,        borderWidth: borderWidth,        borderRadius: borderRadius,        hoverColor: hoverColor);  }}class FlowyHoverBackground extends StatelessWidget {  final HoverDisplayConfig config;  final Widget child;  const FlowyHoverBackground({    Key? key,    required this.child,    this.config = const HoverDisplayConfig(),  }) : super(key: key);  @override  Widget build(BuildContext context) {    final color = config.hoverColor ?? Theme.of(context).colorScheme.background;    final hoverBorder = Border.all(      color: config.borderColor,      width: config.borderWidth,    );    return Container(      decoration: BoxDecoration(        border: hoverBorder,        color: color,        borderRadius: config.borderRadius,      ),      child: child,    );  }}
 |