writeBordered method
void
writeBordered(})
Implementation
void writeBordered(
List<String> lines, {
int horizontalPadding = 2,
int verticalPadding = 1,
BorderCharacters border = const BorderCharacters.basic(),
Alignment alignment = Alignment.center,
}) {
if (horizontalPadding < 0) {
throw ArgumentError.value(
horizontalPadding,
'horizontalPadding',
'horizontalPadding cannot be lower than 0',
);
}
if (verticalPadding < 0) {
throw ArgumentError.value(
verticalPadding,
'verticalPadding',
'verticalPadding cannot be lower than 0',
);
}
final lineLengths = lines.map((line) => visibleLength(line)).toList();
final maxLength = lineLengths.fold(0, (prevLength, length) => math.max(length, prevLength));
final horizontalLength = maxLength + horizontalPadding * 2;
writeln(border.getTopBorder(horizontalLength));
for (int y = 0; y < verticalPadding; y++) {
writeln(border.getEmptyLine(horizontalLength));
}
for (int i = 0; i < lines.length; i++) {
final line = lines[i];
final length = lineLengths[i];
final int paddingTotal;
final int paddingStart;
final int paddingEnd;
switch (alignment) {
case Alignment.left:
paddingTotal = maxLength - length;
paddingStart = horizontalPadding;
paddingEnd = paddingTotal + horizontalPadding;
break;
case Alignment.center:
paddingTotal = maxLength - length;
final halfPadding = (paddingTotal ~/ 2);
paddingStart = halfPadding + horizontalPadding;
paddingEnd = (paddingTotal - halfPadding) + horizontalPadding;
break;
case Alignment.right:
paddingTotal = maxLength - length;
paddingStart = horizontalPadding + paddingTotal;
paddingEnd = horizontalPadding;
break;
}
writeln('${border.left}${border.empty * paddingStart}$line${border.empty * paddingEnd}${border.right}');
}
for (int y = 0; y < verticalPadding; y++) {
writeln(border.getEmptyLine(horizontalLength));
}
writeln(border.getBottomBorder(horizontalLength));
}