text_table 1.0.0
text_table: ^1.0.0 copied to clipboard
Renders style-able flex ascii tables.
text_table #
Renders style-able flex ascii tables.
Features #
- ✅ Customizable table borders
- ✅ Column width customization
- ❌ Flex column widths
- ✅ Cell text alignment
- ❌ Cell padding
- ✅ Text truncation and ellipsis
Usage #
Simple example #
main() {
final Table tab = table(['Player', 'Team', 'Goals'],
columnWidths: [fixed(25), fixed(25), fixed(10)])
..row(['Messi', 'Barcelona FC', 80])
..row(['Christiano Ronaldo', 'Real Madrid', 30])
..row(['Luiz Suarez', 'Barcelona FC', 50]);
print(tab);
}
┌─────────────────────────┬─────────────────────────┬──────────┐
│Player │Team │Goals │
┝━━━━━━━━━━━━━━━━━━━━━━━━━┿━━━━━━━━━━━━━━━━━━━━━━━━━┿━━━━━━━━━━┥
│Messi │Barcelona FC │80 │
├─────────────────────────┼─────────────────────────┼──────────┤
│Christiano Ronaldo │Real Madrid │30 │
├─────────────────────────┼─────────────────────────┼──────────┤
│Luiz Suarez │Barcelona FC │50 │
└─────────────────────────┴─────────────────────────┴──────────┘
Text alignment #
main() {
final Table tab = table(['Player', 'Team', 'Goals'],
columnWidths: [fixed(25), fixed(25), fixed(10)], align: Align.center)
..row(['Messi', 'Barcelona FC', 80])..row(
['Christiano Ronaldo', 'Real Madrid', 30])..row(
['Luiz Suarez', 'Barcelona FC', 50]);
print(tab);
}
┌─────────────────────────┬─────────────────────────┬──────────┐
│ Player │ Team │ Goals │
┝━━━━━━━━━━━━━━━━━━━━━━━━━┿━━━━━━━━━━━━━━━━━━━━━━━━━┿━━━━━━━━━━┥
│ Messi │ Barcelona FC │ 80 │
├─────────────────────────┼─────────────────────────┼──────────┤
│ Christiano Ronaldo │ Real Madrid │ 30 │
├─────────────────────────┼─────────────────────────┼──────────┤
│ Luiz Suarez │ Barcelona FC │ 50 │
└─────────────────────────┴─────────────────────────┴──────────┘
Column specific text alignment
main() {
final Table tab = table(['Player', 'Team', 'Goals'],
columnWidths: [fixed(25), fixed(25), fixed(10)],
aligns: [Align.left, Align.center, Align.right])
..row(['Messi', 'Barcelona FC', 80])
..row(['Christiano Ronaldo', 'Real Madrid', 30])
..row(['Luiz Suarez', 'Barcelona FC', 50]);
print(tab);
}
┌─────────────────────────┬─────────────────────────┬──────────┐
│Player │ Team │ Goals│
┝━━━━━━━━━━━━━━━━━━━━━━━━━┿━━━━━━━━━━━━━━━━━━━━━━━━━┿━━━━━━━━━━┥
│Messi │ Barcelona FC │ 80│
├─────────────────────────┼─────────────────────────┼──────────┤
│Christiano Ronaldo │ Real Madrid │ 30│
├─────────────────────────┼─────────────────────────┼──────────┤
│Luiz Suarez │ Barcelona FC │ 50│
└─────────────────────────┴─────────────────────────┴──────────┘
Border styles #
main() {
final Table tab = table(
['Player', 'Team', 'Goals'],
columnWidths: [fixed(25), fixed(25), fixed(10)],
border: Border.doubleLines,
)
..row(['Messi', 'Barcelona FC', 80])
..row(['Christiano Ronaldo', 'Real Madrid', 30])
..row(['Luiz Suarez', 'Barcelona FC', 50]);
print(tab);
}
╔═════════════════════════╤═════════════════════════╤══════════╗
║Player │Team │Goals ║
╠═════════════════════════╪═════════════════════════╪══════════╣
║Messi │Barcelona FC │80 ║
╟─────────────────────────┼─────────────────────────┼──────────╢
║Christiano Ronaldo │Real Madrid │30 ║
╟─────────────────────────┼─────────────────────────┼──────────╢
║Luiz Suarez │Barcelona FC │50 ║
╚═════════════════════════╧═════════════════════════╧══════════╝
Supported style
TODO
No borders
main() {
final Table tab = table(['Player', 'Team', 'Goals'],
columnWidths: [fixed(25), fixed(25), fixed(10)], border: Border.compact)
..row(['Messi', 'Barcelona FC', 80])
..row(['Christiano Ronaldo', 'Real Madrid', 30])
..row(['Luiz Suarez', 'Barcelona FC', 50]);
print(tab);
}
Player Team Goals
----------------------------------------------------------------
Messi Barcelona FC 80
Christiano Ronaldo Real Madrid 30
Luiz Suarez Barcelona FC 50
Padding #
TODO
Flex columns #
TODO