getPreferredRect method
Returns the size based on the values passed to it.
Implementation
Rect getPreferredRect(
RenderBox parentBox,
SfSliderThemeData themeData,
Offset offset, {
bool? isActive,
}) {
final Size overlayPreferredSize = (parentBox as RenderBaseSlider)
.overlayShape
.getPreferredSize(themeData);
final Size thumbPreferredSize = parentBox.thumbShape.getPreferredSize(
themeData,
);
final Size tickPreferredSize = parentBox.tickShape.getPreferredSize(
themeData,
);
double maxRadius;
if (_isVertical(parentBox)) {
maxRadius = math.max(
overlayPreferredSize.height / 2,
math.max(thumbPreferredSize.height / 2, tickPreferredSize.height / 2),
);
} else {
maxRadius = math.max(
overlayPreferredSize.width / 2,
math.max(thumbPreferredSize.width / 2, tickPreferredSize.width / 2),
);
}
final double maxTrackHeight = math.max(
themeData.activeTrackHeight,
themeData.inactiveTrackHeight,
);
// ignore: avoid_as
if (_isVertical(parentBox)) {
double left = offset.dx;
if (isActive != null) {
left +=
isActive
? (maxTrackHeight - themeData.activeTrackHeight) / 2
: (maxTrackHeight - themeData.inactiveTrackHeight) / 2;
}
final double right =
left +
(isActive == null
? maxTrackHeight
: (isActive
? themeData.activeTrackHeight
: themeData.inactiveTrackHeight));
final double top = offset.dy + maxRadius;
final double bottom = top + parentBox.size.height - (2 * maxRadius);
return Rect.fromLTRB(
math.min(left, right),
top,
math.max(left, right),
bottom,
);
} else {
final double left = offset.dx + maxRadius;
double top = offset.dy;
if (isActive != null) {
top +=
isActive
? (maxTrackHeight - themeData.activeTrackHeight) / 2
: (maxTrackHeight - themeData.inactiveTrackHeight) / 2;
}
final double right = left + parentBox.size.width - (2 * maxRadius);
final double bottom =
top +
(isActive == null
? maxTrackHeight
: (isActive
? themeData.activeTrackHeight
: themeData.inactiveTrackHeight));
return Rect.fromLTRB(
math.min(left, right),
top,
math.max(left, right),
bottom,
);
}
}