53 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| import 'package:flutter/material.dart';
 | |
| 
 | |
| class DraggableDivider extends StatefulWidget {
 | |
|   final Axis axis;
 | |
|   final double thickness;
 | |
|   final Color color;
 | |
|   final Function(double)? onPointerMove;
 | |
|   final VoidCallback? onHover;
 | |
|   final EdgeInsets padding;
 | |
|   const DraggableDivider({
 | |
|     super.key,
 | |
|     this.axis = Axis.horizontal,
 | |
|     this.thickness = 1.0,
 | |
|     this.color = const Color.fromARGB(200, 177, 175, 175),
 | |
|     this.onPointerMove,
 | |
|     this.padding = const EdgeInsets.symmetric(horizontal: 1.0),
 | |
|     this.onHover,
 | |
|   });
 | |
| 
 | |
|   @override
 | |
|   State<DraggableDivider> createState() => _DraggableDividerState();
 | |
| }
 | |
| 
 | |
| class _DraggableDividerState extends State<DraggableDivider> {
 | |
|   @override
 | |
|   Widget build(BuildContext context) {
 | |
|     return Listener(
 | |
|       onPointerMove: (event) {
 | |
|         final dl = widget.axis == Axis.horizontal
 | |
|             ? event.localDelta.dy
 | |
|             : event.localDelta.dx;
 | |
|         widget.onPointerMove?.call(dl);
 | |
|       },
 | |
|       onPointerHover: (event) => widget.onHover?.call(),
 | |
|       child: MouseRegion(
 | |
|         cursor: SystemMouseCursors.resizeLeftRight,
 | |
|         child: Padding(
 | |
|           padding: widget.padding,
 | |
|           child: Container(
 | |
|             decoration: BoxDecoration(color: widget.color),
 | |
|             width: widget.axis == Axis.horizontal
 | |
|                 ? double.infinity
 | |
|                 : widget.thickness,
 | |
|             height: widget.axis == Axis.horizontal
 | |
|                 ? widget.thickness
 | |
|                 : double.infinity,
 | |
|           ),
 | |
|         ),
 | |
|       ),
 | |
|     );
 | |
|   }
 | |
| }
 |