performPaint method

  1. @override
void performPaint(
  1. Buffer buffer,
  2. Offset offset
)
override

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;
    }
  }
}