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,
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,
}) {
assert(sliderTheme.disabledActiveTrackColor != null);
assert(sliderTheme.disabledInactiveTrackColor != null);
assert(sliderTheme.activeTrackColor != null);
assert(sliderTheme.inactiveTrackColor != null);
assert(sliderTheme.rangeThumbShape != null);
assert(enableAnimation != null);
// 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 Rect trackRect = getPreferredRect(
parentBox: parentBox,
offset: offset,
sliderTheme: sliderTheme,
isEnabled: isEnabled,
isDiscrete: isDiscrete,
);
final Rect leftTrackSegment = Rect.fromLTRB(
trackRect.left,
trackRect.top,
leftThumbOffset.dx,
trackRect.bottom,
);
if (!leftTrackSegment.isEmpty) {
context.canvas.drawRect(leftTrackSegment, inactivePaint);
}
final Rect middleTrackSegment = Rect.fromLTRB(
leftThumbOffset.dx,
trackRect.top,
rightThumbOffset.dx,
trackRect.bottom,
);
if (!middleTrackSegment.isEmpty) {
context.canvas.drawRect(middleTrackSegment, activePaint);
}
final Rect rightTrackSegment = Rect.fromLTRB(
rightThumbOffset.dx,
trackRect.top,
trackRect.right,
trackRect.bottom,
);
if (!rightTrackSegment.isEmpty) {
context.canvas.drawRect(rightTrackSegment, inactivePaint);
}
}