Fix slider preferred height (#36028)
[Material] Fix slider preferred height
This commit is contained in:
parent
9c8badd1b5
commit
38fdf56c16
@ -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<Size> get _sliderPartSizes => <Size>[
|
||||
_sliderTheme.overlayShape.getPreferredSize(isInteractive, isDiscrete),
|
||||
_sliderTheme.thumbShape.getPreferredSize(isInteractive, isDiscrete),
|
||||
|
@ -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<double> 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<RenderBox>(find.byType(Slider));
|
||||
expect(renderObject.size.height, 200);
|
||||
});
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user