render method
Renders the widget onto the provided buffer within the specified area.
Implementation
@override
void render(Buffer buffer, Rect area) {
final percent = ((value - min) / (max - min)).clamp(0.0, 1.0);
if (axis == SliderAxis.horizontal) {
final trackLength = area.width;
if (trackLength <= 0) return;
final thumbPos = (percent * (trackLength - 1)).round();
final tc = trackChar == '─' ? '─' : trackChar;
for (int i = 0; i < trackLength; i++) {
if (i == thumbPos) {
buffer.writeString(i, 0, thumbChar, thumbStyle);
} else {
buffer.writeString(i, 0, tc, trackStyle);
}
}
} else {
final trackLength = area.height;
if (trackLength <= 0) return;
// In terminal, Y=0 is top. For vertical sliders, top is max.
final thumbPos = trackLength - 1 - (percent * (trackLength - 1)).round();
final tc = trackChar == '─' ? '│' : trackChar;
for (int i = 0; i < trackLength; i++) {
if (i == thumbPos) {
buffer.writeString(0, i, thumbChar, thumbStyle);
} else {
buffer.writeString(0, i, tc, trackStyle);
}
}
}
}