diff --git a/lib/src/flutter_range_slider.dart b/lib/src/flutter_range_slider.dart index 872a0c5..fb87302 100644 --- a/lib/src/flutter_range_slider.dart +++ b/lib/src/flutter_range_slider.dart @@ -1277,6 +1277,20 @@ class _RenderRangeSlider extends RenderBox { _ActiveThumb _previousActiveThumb = _ActiveThumb.none; _validateActiveThumb(Offset position) { + + void setUpperThumbAsActive(double divisionOffset) { + _activeThumb = _ActiveThumb.upperThumb; + _minDragValue = _discretize(_lowerValue + divisionOffset); + _maxDragValue = 1.0; + } + + void setLowerThumbAsActive(double divisionOffset) { + _activeThumb = _ActiveThumb.lowerThumb; + _minDragValue = 0.0; + _maxDragValue = _discretize(_upperValue - divisionOffset); + } + + var _thumbLowerExpandedRect = Rect.fromCircle( center: _thumbLowerRect.centerLeft, radius: _thumbRadius * _touchRadiusExpansionRatio); @@ -1288,14 +1302,16 @@ class _RenderRangeSlider extends RenderBox { : (_thumbRadius * 2.0) / _trackLength; double divisionOffset = _allowThumbOverlap ? 0.0 : calculatedDivisionOffset; - if (_thumbLowerExpandedRect.contains(position)) { - _activeThumb = _ActiveThumb.lowerThumb; - _minDragValue = 0.0; - _maxDragValue = _discretize(_upperValue - divisionOffset); + if (_thumbLowerExpandedRect.contains(position) && _thumbUpperExpandedRect.contains(position)) { + if (_upperValue < 0.5) { + setUpperThumbAsActive(divisionOffset); + } else { + setLowerThumbAsActive(divisionOffset); + } + } else if (_thumbLowerExpandedRect.contains(position)) { + setLowerThumbAsActive(divisionOffset); } else if (_thumbUpperExpandedRect.contains(position)) { - _activeThumb = _ActiveThumb.upperThumb; - _minDragValue = _discretize(_lowerValue + divisionOffset); - _maxDragValue = 1.0; + setUpperThumbAsActive(divisionOffset); } else { _activeThumb = _ActiveThumb.none; }