performPaint method
Hook for subclasses to implement actual painting.
Implementation
@override
void performPaint(Buffer buffer, Offset offset) {
final viewport = Viewport(
buffer,
Rect(offset.dx, offset.dy, size.width, size.height),
);
final paginator = widget as Paginator;
if (paginator.totalPages <= 0 || size.width <= 0 || size.height <= 0) {
return;
}
final current = paginator.currentPage.clamp(0, paginator.totalPages - 1);
final dotChars = paginator.activeDot.characters;
final inactiveDotChars = paginator.inactiveDot.characters;
final separatorChars = paginator.separator.characters;
var currentX = 0;
for (var i = 0; i < paginator.totalPages; i++) {
final isCurrent = i == current;
final dot = isCurrent ? paginator.activeDot : paginator.inactiveDot;
final dotLen = isCurrent ? dotChars.length : inactiveDotChars.length;
final dotStyle = isCurrent
? paginator.activeStyle
: paginator.inactiveStyle;
if (currentX + dotLen > size.width) break;
viewport.writeString(currentX, 0, dot, dotStyle);
currentX += dotLen;
if (i < paginator.totalPages - 1) {
if (currentX + separatorChars.length > size.width) break;
viewport.writeString(
currentX,
0,
paginator.separator,
paginator.separatorStyle,
);
currentX += separatorChars.length;
}
}
}