[Material] Fix TextDirection and selected thumb for RangeSliderThumbShape and RangeSliderValueIndicatorShape (#34501)
Expose the RangeSlider's TextDirection in the RangeSliderThumbShape's abstract paint() method, and ensure that start and end thumb are non-null when being passed to the thumb and value indicator shape paint methods.
diff --git a/packages/flutter/lib/src/material/range_slider.dart b/packages/flutter/lib/src/material/range_slider.dart
index 2ad954d..613602b 100644
--- a/packages/flutter/lib/src/material/range_slider.dart
+++ b/packages/flutter/lib/src/material/range_slider.dart
@@ -1229,6 +1229,7 @@
final bool isLastThumbStart = _lastThumbSelection == Thumb.start;
final Thumb bottomThumb = isLastThumbStart ? Thumb.end : Thumb.start;
+ final Thumb topThumb = isLastThumbStart ? Thumb.start : Thumb.end;
final Offset bottomThumbCenter = isLastThumbStart ? endThumbCenter : startThumbCenter;
final Offset topThumbCenter = isLastThumbStart ? startThumbCenter : endThumbCenter;
final TextPainter bottomLabelPainter = isLastThumbStart ? _endLabelPainter : _startLabelPainter;
@@ -1262,7 +1263,7 @@
parentBox: this,
sliderTheme: _sliderTheme,
textDirection: _textDirection,
- thumb: _lastThumbSelection,
+ thumb: topThumb,
value: topValue,
);
}
@@ -1274,6 +1275,7 @@
enableAnimation: _enableAnimation,
isDiscrete: isDiscrete,
isOnTop: false,
+ textDirection: textDirection,
sliderTheme: _sliderTheme,
thumb: bottomThumb,
);
@@ -1284,8 +1286,9 @@
enableAnimation: _enableAnimation,
isDiscrete: isDiscrete,
isOnTop: thumbDelta < sliderTheme.rangeThumbShape.getPreferredSize(isEnabled, isDiscrete).width,
+ textDirection: textDirection,
sliderTheme: _sliderTheme,
- thumb: _lastThumbSelection,
+ thumb: topThumb,
);
}
diff --git a/packages/flutter/lib/src/material/slider_theme.dart b/packages/flutter/lib/src/material/slider_theme.dart
index 9249ad4..d43c3a0 100644
--- a/packages/flutter/lib/src/material/slider_theme.dart
+++ b/packages/flutter/lib/src/material/slider_theme.dart
@@ -1193,6 +1193,10 @@
///
/// {@macro flutter.material.rangeSlider.shape.sliderTheme}
///
+ /// [textDirection] can be used to determine how the orientation of either
+ /// slider thumb should be changed, such as drawing different shapes for the
+ /// left and right thumb.
+ ///
/// {@macro flutter.material.rangeSlider.shape.thumb}
void paint(
PaintingContext context,
@@ -1202,6 +1206,7 @@
bool isDiscrete,
bool isEnabled,
bool isOnTop,
+ TextDirection textDirection,
SliderThemeData sliderTheme,
Thumb thumb,
});
@@ -2290,6 +2295,7 @@
bool isEnabled = false,
bool isOnTop,
@required SliderThemeData sliderTheme,
+ TextDirection textDirection,
Thumb thumb,
}) {
assert(context != null);