Skip to content

Commit 246536f

Browse files
committed
feat: add columnSeparator property in table
1 parent 29adc32 commit 246536f

File tree

2 files changed

+27
-9
lines changed

2 files changed

+27
-9
lines changed

β€Žexample/table.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ Future<void> main() async {
44
Table(
55
columns: ['Name', 'Age', 'Country', 'City'],
66
lineSeparator: false,
7+
columnSeparator: false,
78
data: [
89
['Alice', '20', 'USA', 'New York'],
910
['Bob', '25', 'Canada', 'Toronto'],

β€Žlib/src/components/table.dart

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,14 @@ final class Table with Tools implements Component {
1010
final List<List<String>> data;
1111
final List<String> columns;
1212
final bool lineSeparator;
13+
final bool columnSeparator;
1314

1415
/// Creates a new instance of [Table].
1516
Table({
1617
this.data = const [],
1718
this.columns = const [],
1819
this.lineSeparator = false,
20+
this.columnSeparator = false,
1921
}) {
2022
render();
2123
}
@@ -25,16 +27,19 @@ final class Table with Tools implements Component {
2527

2628
final buffer = StringBuffer();
2729

28-
_drawLineSeparator(buffer, left: 'β”Œ', middle: '┬', right: '┐', separator: '─');
30+
_drawLineSeparator(buffer,
31+
left: 'β”Œ', middle: columnSeparator ? '┬' : '─', right: '┐', separator: '─');
2932
_drawHeader(buffer);
30-
_drawLineSeparator(buffer, left: 'β”œ', middle: 'β”Ό', right: '─', separator: '─');
33+
_drawLineSeparator(buffer,
34+
left: 'β”œ', middle: columnSeparator ? 'β”Ό' : '─', right: '─', separator: '─');
3135

3236
for (var row in data) {
3337
final currentIndex = data.indexOf(row);
3438
_drawLine(buffer, currentIndex, row);
3539
}
3640

37-
_drawLineSeparator(buffer, left: 'β””', middle: 'β”΄', right: 'β”˜', separator: '─');
41+
_drawLineSeparator(buffer,
42+
left: 'β””', middle: columnSeparator ? 'β”΄' : '─', right: 'β”˜', separator: '─');
3843

3944
clearFromCursorToEnd();
4045
restoreCursorPosition();
@@ -74,6 +79,7 @@ final class Table with Tools implements Component {
7479
String line = left;
7580
for (int i = 0; i < maxColWidths.length; i++) {
7681
final isLast = i == maxColWidths.length - 1;
82+
7783
line += separator * (maxColWidths[i] + 2);
7884
line += isLast ? right : middle;
7985
}
@@ -87,14 +93,18 @@ final class Table with Tools implements Component {
8793

8894
headerBuffer.write('β”‚');
8995

90-
9196
for (var i = 0; i < columns.length; i++) {
9297
headerBuffer.writeAnsiAll([
9398
SetStyles(Style.bold),
9499
Print(' ${columns[i].padRight(maxColWidths[i])}'),
95100
SetStyles.reset,
96-
Print(' β”‚'),
97101
]);
102+
103+
if (i == columns.length - 1) {
104+
headerBuffer.writeAnsi(Print(' β”‚'));
105+
} else {
106+
headerBuffer.writeAnsi(Print(columnSeparator ? ' β”‚' : ' '));
107+
}
98108
}
99109

100110
buffer.writeln(headerBuffer.toString());
@@ -104,13 +114,20 @@ final class Table with Tools implements Component {
104114
final maxColWidths = getMaxCellWidths();
105115

106116
if (![0, data.length].contains(currentIndex) && lineSeparator) {
107-
_drawLineSeparator(buffer, left: 'β”œ', middle: 'β”Ό', right: '─', separator: '─');
117+
_drawLineSeparator(buffer, left: 'β”œ', middle: lineSeparator ? columnSeparator ? 'β”Ό' : '─' : 'β”Ό', right: '─', separator: '─');
108118
}
109119

110120
String rowLine = 'β”‚';
111-
for (var col = 0; col < columns.length; col++) {
112-
rowLine += ' ${row[col].padRight(maxColWidths[col])}';
113-
rowLine += ' β”‚';
121+
for (var i = 0; i < columns.length; i++) {
122+
rowLine += ' ${row[i].padRight(maxColWidths[i])}';
123+
124+
if (i == columns.length - 1) {
125+
// headerBuffer.writeAnsi(Print(' β”‚'));
126+
rowLine += ' β”‚';
127+
} else {
128+
// headerBuffer.writeAnsi(Print(columnSeparator ? ' β”‚' : ' '));
129+
rowLine += columnSeparator ? ' β”‚' : ' ';
130+
}
114131
}
115132

116133
buffer.writeln(rowLine);

0 commit comments

Comments
Β (0)