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