From b2392ad859b431326f605725e170839fb511b0bd Mon Sep 17 00:00:00 2001 From: Maksym Date: Mon, 3 Jun 2024 16:59:19 +0300 Subject: [PATCH] fix issue when you can't drag and drop upper thumb back after moving it to the left side because lower thumb always active thumb in tis case, but it stay on 0 position and can't be moved. --- lib/src/flutter_range_slider.dart | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) 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; }