| 
									
										
										
										
											2023-02-24 14:15:54 +08:00
										 |  |  | 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) { | 
					
						
							| 
									
										
										
										
											2023-06-23 17:05:48 +08:00
										 |  |  |         final dl = widget.axis == Axis.horizontal | 
					
						
							|  |  |  |             ? event.localDelta.dy | 
					
						
							|  |  |  |             : event.localDelta.dx; | 
					
						
							| 
									
										
										
										
											2023-02-24 14:15:54 +08:00
										 |  |  |         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, | 
					
						
							|  |  |  |           ), | 
					
						
							|  |  |  |         ), | 
					
						
							|  |  |  |       ), | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } |