drawHandlers method
dynamic
drawHandlers()
Implementation
drawHandlers() {
List<Positioned> items = [
Function.apply(_inactiveTrack, []),
Function.apply(_centralWidget, []),
Function.apply(_activeTrack, [])
];
items.addAll(_points);
double tappedPositionWithPadding = 0;
items.add(
Positioned(
left: 0,
right: 0,
top: 0,
bottom: 0,
child: Opacity(
opacity: 0,
child: Listener(
onPointerUp: (_) {
__dragging = false;
if (widget.selectByTap && !__dragging) {
tappedPositionWithPadding = _distance();
if (_distanceFromLeftHandler! < _distanceFromRightHandler!) {
if (!widget.rangeSlider) {
_rightHandlerMove(_, tappedPositionWithPadding: tappedPositionWithPadding, selectedByTap: true);
} else {
_leftHandlerMove(_, tappedPositionWithPadding: tappedPositionWithPadding, selectedByTap: true);
}
} else {
_rightHandlerMove(_, tappedPositionWithPadding: tappedPositionWithPadding, selectedByTap: true);
}
} else {
if (_slidingByActiveTrackBar) {
_callbacks('onDragCompleted', 0);
}
if (_leftTapAndSlide) {
_callbacks('onDragCompleted', 0);
}
if (_rightTapAndSlide) {
_callbacks('onDragCompleted', 1);
}
}
_hideTooltips();
_stopHandlerAnimation(animation: _leftHandlerScaleAnimation, controller: _leftHandlerScaleAnimationController);
_stopHandlerAnimation(
animation: _rightHandlerScaleAnimation, controller: _rightHandlerScaleAnimationController);
setState(() {});
},
onPointerMove: (_) {
__dragging = true;
if (_slidingByActiveTrackBar) {
_trackBarSlideCallDragStated(0);
_leftHandlerMove(_, lockedHandlersDragOffset: __lockedHandlersDragOffset);
} else {
tappedPositionWithPadding = _distance();
if (widget.rangeSlider) {
if (_leftTapAndSlide) {
_trackBarSlideCallDragStated(0);
if (!_tooltipData.disabled! && _tooltipData.alwaysShowTooltip == false) {
_leftTooltipOpacity = 1;
_leftTooltipAnimationController.forward();
}
_leftHandlerMove(_, tappedPositionWithPadding: tappedPositionWithPadding);
} else {
_trackBarSlideCallDragStated(1);
if (!_tooltipData.disabled! && _tooltipData.alwaysShowTooltip == false) {
_rightTooltipOpacity = 1;
_rightTooltipAnimationController.forward();
}
_rightHandlerMove(_, tappedPositionWithPadding: tappedPositionWithPadding);
}
} else {
_trackBarSlideCallDragStated(1);
if (!_tooltipData.disabled! && _tooltipData.alwaysShowTooltip == false) {
_rightTooltipOpacity = 1;
_rightTooltipAnimationController.forward();
}
_rightHandlerMove(_, tappedPositionWithPadding: tappedPositionWithPadding);
}
}
},
onPointerDown: (_) {
_leftTapAndSlide = false;
_rightTapAndSlide = false;
_slidingByActiveTrackBar = false;
__dragging = false;
_trackBarSlideOnDragStartedCalled = false;
double leftHandlerLastPosition, rightHandlerLastPosition;
if (widget.axis == Axis.horizontal) {
double lX = _leftHandlerXPosition! + _handlersPadding + _touchSize! + _containerLeft;
double rX = _rightHandlerXPosition! + _handlersPadding + _touchSize! + _containerLeft;
_distanceFromRightHandler = (rX - _.position.dx);
_distanceFromLeftHandler = (lX - _.position.dx);
leftHandlerLastPosition = lX;
rightHandlerLastPosition = rX;
} else {
double lY = _leftHandlerYPosition! + _handlersPadding + _touchSize! + _containerTop;
double rY = _rightHandlerYPosition! + _handlersPadding + _touchSize! + _containerTop;
_distanceFromLeftHandler = (lY - _.position.dy);
_distanceFromRightHandler = (rY - _.position.dy);
leftHandlerLastPosition = lY;
rightHandlerLastPosition = rY;
}
if (widget.rangeSlider &&
widget.trackBar.activeTrackBarDraggable &&
_ignoreSteps.isEmpty &&
_distanceFromRightHandler! > 0 &&
_distanceFromLeftHandler! < 0) {
_slidingByActiveTrackBar = true;
} else {
double thumbPosition = (widget.axis == Axis.vertical) ? _.position.dy : _.position.dx;
if (_distanceFromLeftHandler!.abs() < _distanceFromRightHandler!.abs() ||
(_distanceFromLeftHandler == _distanceFromRightHandler && thumbPosition < leftHandlerLastPosition)) {
_leftTapAndSlide = true;
}
if (_distanceFromRightHandler!.abs() < _distanceFromLeftHandler!.abs() ||
(_distanceFromLeftHandler == _distanceFromRightHandler && thumbPosition < rightHandlerLastPosition)) {
_rightTapAndSlide = true;
}
}
// if drag is within active area
if (_distanceFromRightHandler! > 0 && _distanceFromLeftHandler! < 0) {
if (widget.axis == Axis.horizontal) {
xDragTmp = 0;
__lockedHandlersDragOffset = (_leftHandlerXPosition! + _containerLeft - _.position.dx).abs();
} else {
yDragTmp = 0;
__lockedHandlersDragOffset = (_leftHandlerYPosition! + _containerTop - _.position.dy).abs();
}
}
// }
if (_ignoreSteps.isEmpty) {
if ((widget.lockHandlers || __lockedHandlersDragOffset > 0) &&
!_tooltipData.disabled! &&
_tooltipData.alwaysShowTooltip == false) {
_leftTooltipOpacity = 1;
_leftTooltipAnimationController.forward();
_rightTooltipOpacity = 1;
_rightTooltipAnimationController.forward();
}
if ((widget.lockHandlers || __lockedHandlersDragOffset > 0)) {
_leftHandlerScaleAnimationController!.forward();
_rightHandlerScaleAnimationController!.forward();
}
}
setState(() {});
},
child: Draggable(
axis: widget.axis,
feedback: Container(),
child: Container(
color: Colors.transparent,
),
),
),
),
),
);
// items ..addAll(_points);
for (Function func in _positionedItems) {
items.add(Function.apply(func, []));
}
return items;
}