getPreferredRect method

Rect getPreferredRect({
  1. required RenderBox parentBox,
  2. Offset offset = Offset.zero,
  3. required AnnotatedSliderThemeData sliderTheme,
  4. bool isEnabled = false,
  5. bool isDiscrete = false,
})

Implementation

Rect getPreferredRect({
  required RenderBox parentBox,
  Offset offset = Offset.zero,
  required AnnotatedSliderThemeData sliderTheme,
  bool isEnabled = false,
  bool isDiscrete = false,
}) {
  final double thumbWidth =
      sliderTheme.thumbShape!.getPreferredSize(isEnabled, isDiscrete).width;
  final double overlayWidth =
      sliderTheme.overlayShape!.getPreferredSize(isEnabled, isDiscrete).width;
  final double trackHeight = sliderTheme.trackHeight!;
  assert(overlayWidth >= 0);
  assert(trackHeight >= 0);

  final double trackLeft =
      offset.dx +
      (sliderTheme.padding == null
          ? math.max(overlayWidth / 2, thumbWidth / 2)
          : 0);
  final double trackTop =
      offset.dy + (parentBox.size.height - trackHeight) / 2;
  final double trackRight =
      trackLeft +
      parentBox.size.width -
      (sliderTheme.padding == null ? math.max(thumbWidth, overlayWidth) : 0);
  final double trackBottom = trackTop + trackHeight;
  // If the parentBox's size less than slider's size the trackRight will be less than trackLeft, so switch them.
  return Rect.fromLTRB(
    math.min(trackLeft, trackRight),
    trackTop,
    math.max(trackLeft, trackRight),
    trackBottom,
  );
}