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,
 | 
						|
          ),
 | 
						|
        ),
 | 
						|
      ),
 | 
						|
    );
 | 
						|
  }
 | 
						|
}
 |