From 38fdf56c160d5ce3bd6eeca1dcb91b5059fbfaad Mon Sep 17 00:00:00 2001 From: brettfingo <47990899+brettfingo@users.noreply.github.com> Date: Fri, 26 Jul 2019 10:42:15 -0700 Subject: [PATCH] Fix slider preferred height (#36028) [Material] Fix slider preferred height --- packages/flutter/lib/src/material/slider.dart | 2 +- .../flutter/test/material/slider_test.dart | 62 +++++++++++++++++++ 2 files changed, 63 insertions(+), 1 deletion(-) diff --git a/packages/flutter/lib/src/material/slider.dart b/packages/flutter/lib/src/material/slider.dart index 411031ca4c..1014bb1eb8 100644 --- a/packages/flutter/lib/src/material/slider.dart +++ b/packages/flutter/lib/src/material/slider.dart @@ -698,7 +698,7 @@ class _RenderSlider extends RenderBox { // other than the track shape. It is assumed that these shapes are vertically // centered on the track. double get _maxSliderPartWidth => _sliderPartSizes.map((Size size) => size.width).reduce(math.max); - double get _maxSliderPartHeight => _sliderPartSizes.map((Size size) => size.width).reduce(math.max); + double get _maxSliderPartHeight => _sliderPartSizes.map((Size size) => size.height).reduce(math.max); List get _sliderPartSizes => [ _sliderTheme.overlayShape.getPreferredSize(isInteractive, isDiscrete), _sliderTheme.thumbShape.getPreferredSize(isInteractive, isDiscrete), diff --git a/packages/flutter/test/material/slider_test.dart b/packages/flutter/test/material/slider_test.dart index f3abb74e84..349b3a7f2b 100644 --- a/packages/flutter/test/material/slider_test.dart +++ b/packages/flutter/test/material/slider_test.dart @@ -46,6 +46,28 @@ class LoggingThumbShape extends SliderComponentShape { } } +class TallSliderTickMarkShape extends SliderTickMarkShape { + @override + Size getPreferredSize({SliderThemeData sliderTheme, bool isEnabled}) { + return const Size(10.0, 200.0); + } + + @override + void paint( + PaintingContext context, + Offset offset, { + Offset thumbCenter, + RenderBox parentBox, + SliderThemeData sliderTheme, + Animation enableAnimation, + bool isEnabled, + TextDirection textDirection, + }) { + final Paint paint = Paint()..color = Colors.red; + context.canvas.drawRect(Rect.fromLTWH(offset.dx, offset.dy, 10.0, 20.0), paint); + } +} + void main() { testWidgets('Slider can move when tapped (LTR)', (WidgetTester tester) async { final Key sliderKey = UniqueKey(); @@ -1485,4 +1507,44 @@ void main() { await gesture.moveBy(const Offset(600.0, 0.0)); expect(value, 1.0); }); + + testWidgets('Slider respects height from theme', (WidgetTester tester) async { + final Key sliderKey = UniqueKey(); + double value = 0.0; + await tester.pumpWidget( + Directionality( + textDirection: TextDirection.ltr, + child: StatefulBuilder( + builder: (BuildContext context, StateSetter setState) { + final SliderThemeData sliderTheme = SliderTheme.of(context).copyWith(tickMarkShape: TallSliderTickMarkShape()); + return MediaQuery( + data: MediaQueryData.fromWindow(window), + child: Material( + child: Center( + child: IntrinsicHeight( + child: SliderTheme( + data: sliderTheme, + child: Slider( + key: sliderKey, + value: value, + divisions: 4, + onChanged: (double newValue) { + setState(() { + value = newValue; + }); + }, + ), + ), + ), + ), + ), + ); + }, + ), + ), + ); + + final RenderBox renderObject = tester.renderObject(find.byType(Slider)); + expect(renderObject.size.height, 200); + }); }