paint method

  1. @override
void paint(
  1. PaintingContext context,
  2. Offset offset, {
  3. required RenderBox parentBox,
  4. required AnnotatedSliderThemeData sliderTheme,
  5. required Animation<double>? enableAnimation,
  6. required Offset startThumbCenter,
  7. required Offset endThumbCenter,
  8. bool isEnabled = false,
  9. bool isDiscrete = false,
  10. 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);
  }
}