getPreferredRect method
Rect
getPreferredRect({
- required RenderBox parentBox,
- Offset offset = Offset.zero,
- required AnnotatedSliderThemeData sliderTheme,
- bool isEnabled = false,
- 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,
);
}