mouse_hover_builder.dart 942 B

1234567891011121314151617181920212223242526272829303132333435
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter/rendering.dart';
  3. typedef HoverBuilder = Widget Function(BuildContext context, bool isHovering);
  4. class MouseHoverBuilder extends StatefulWidget {
  5. final bool isClickable;
  6. const MouseHoverBuilder(
  7. {Key? key, required this.builder, this.isClickable = false})
  8. : super(key: key);
  9. final HoverBuilder builder;
  10. @override
  11. _MouseHoverBuilderState createState() => _MouseHoverBuilderState();
  12. }
  13. class _MouseHoverBuilderState extends State<MouseHoverBuilder> {
  14. bool isOver = false;
  15. @override
  16. Widget build(BuildContext context) {
  17. return MouseRegion(
  18. cursor: widget.isClickable
  19. ? SystemMouseCursors.click
  20. : SystemMouseCursors.basic,
  21. onEnter: (p) => setOver(true),
  22. onExit: (p) => setOver(false),
  23. child: widget.builder(context, isOver),
  24. );
  25. }
  26. void setOver(bool value) => setState(() => isOver = value);
  27. }