paint method
void
paint(
- PaintingContext context,
- Offset offset, {
- required RenderBox parentBox,
- required AnnotatedSliderThemeData sliderTheme,
- required Animation<
double> enableAnimation, - required Offset startThumbCenter,
- required Offset endThumbCenter,
- bool isEnabled = false,
- bool isDiscrete = false,
- required TextDirection textDirection,
- double additionalActiveTrackHeight = 2,
override
Implementation
@override
void paint(
PaintingContext context,
Offset offset, {
required RenderBox parentBox,
required AnnotatedSliderThemeData sliderTheme,
required Animation<double> enableAnimation,
required Offset startThumbCenter,
required Offset endThumbCenter,
bool isEnabled = false,
bool isDiscrete = false,
required TextDirection textDirection,
double additionalActiveTrackHeight = 2,
}) {
assert(sliderTheme.disabledActiveTrackColor != null);
assert(sliderTheme.disabledInactiveTrackColor != null);
assert(sliderTheme.activeTrackColor != null);
assert(sliderTheme.inactiveTrackColor != null);
assert(sliderTheme.rangeThumbShape != null);
if (sliderTheme.trackHeight == null || sliderTheme.trackHeight! <= 0) {
return;
}
// Assign the track segment paints, which are left: active, right: inactive,
// but reversed for right to left text.
final ColorTween activeTrackColorTween = ColorTween(
begin: sliderTheme.disabledActiveTrackColor,
end: sliderTheme.activeTrackColor,
);
final ColorTween inactiveTrackColorTween = ColorTween(
begin: sliderTheme.disabledInactiveTrackColor,
end: sliderTheme.inactiveTrackColor,
);
final Paint activePaint =
Paint()..color = activeTrackColorTween.evaluate(enableAnimation)!;
final Paint inactivePaint =
Paint()..color = inactiveTrackColorTween.evaluate(enableAnimation)!;
final (
Offset leftThumbOffset,
Offset rightThumbOffset,
) = switch (textDirection) {
TextDirection.ltr => (startThumbCenter, endThumbCenter),
TextDirection.rtl => (endThumbCenter, startThumbCenter),
};
final Size thumbSize = sliderTheme.rangeThumbShape!.getPreferredSize(
isEnabled,
isDiscrete,
);
final double thumbRadius = thumbSize.width / 2;
assert(thumbRadius > 0);
final Rect trackRect = getPreferredRect(
parentBox: parentBox,
offset: offset,
sliderTheme: sliderTheme,
isEnabled: isEnabled,
isDiscrete: isDiscrete,
);
final Radius trackRadius = Radius.circular(trackRect.height / 2);
context.canvas.drawRRect(
RRect.fromLTRBAndCorners(
trackRect.left,
trackRect.top,
leftThumbOffset.dx,
trackRect.bottom,
topLeft: trackRadius,
bottomLeft: trackRadius,
),
inactivePaint,
);
context.canvas.drawRRect(
RRect.fromLTRBAndCorners(
rightThumbOffset.dx,
trackRect.top,
trackRect.right,
trackRect.bottom,
topRight: trackRadius,
bottomRight: trackRadius,
),
inactivePaint,
);
context.canvas.drawRRect(
RRect.fromLTRBR(
leftThumbOffset.dx - (sliderTheme.trackHeight! / 2),
trackRect.top - (additionalActiveTrackHeight / 2),
rightThumbOffset.dx + (sliderTheme.trackHeight! / 2),
trackRect.bottom + (additionalActiveTrackHeight / 2),
trackRadius,
),
activePaint,
);
}