text_table 3.0.0
text_table: ^3.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
TODO #
- ❌ Multiline cells
Usage #
Simple example #
main() {
final Table tab = table(['Player', 'Team', 'Goals'])
..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 #
final Table tab = table(['Player', 'Team', 'Goals'],
colWidths: [fixed(25), fixed(25), fixed(10)], globalAlign: Align.center)
..row(['Messi', 'Barcelona FC', 80])
..row(['Christiano Ronaldo', 'Real Madrid', 30])
..row(['Luiz Suarez', 'Barcelona FC', 50]);
┌─────────────────────────┬─────────────────────────┬──────────┐
│ Player │ Team │ Goals │
┝━━━━━━━━━━━━━━━━━━━━━━━━━┿━━━━━━━━━━━━━━━━━━━━━━━━━┿━━━━━━━━━━┥
│ Messi │ Barcelona FC │ 80 │
├─────────────────────────┼─────────────────────────┼──────────┤
│ Christiano Ronaldo │ Real Madrid │ 30 │
├─────────────────────────┼─────────────────────────┼──────────┤
│ Luiz Suarez │ Barcelona FC │ 50 │
└─────────────────────────┴─────────────────────────┴──────────┘
Column specific text alignment
final Table tab = table(['Player', 'Team', 'Goals'],
colWidths: [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]);
┌─────────────────────────┬─────────────────────────┬──────────┐
│Player │ Team │ Goals│
┝━━━━━━━━━━━━━━━━━━━━━━━━━┿━━━━━━━━━━━━━━━━━━━━━━━━━┿━━━━━━━━━━┥
│Messi │ Barcelona FC │ 80│
├─────────────────────────┼─────────────────────────┼──────────┤
│Christiano Ronaldo │ Real Madrid │ 30│
├─────────────────────────┼─────────────────────────┼──────────┤
│Luiz Suarez │ Barcelona FC │ 50│
└─────────────────────────┴─────────────────────────┴──────────┘
Padding #
final Table tab = table(['Player', 'Team', 'Goals'],
globalPadding: pad(before: 2, after: 2))
..row(['Messi', 'Barcelona FC', 80])
..row(['Christiano Ronaldo', 'Real Madrid', 30])
..row(['Luiz Suarez', 'Barcelona FC', 50]);
┌──────────────────────┬────────────────┬─────────┐
│ Player │ Team │ Goals │
┝━━━━━━━━━━━━━━━━━━━━━━┿━━━━━━━━━━━━━━━━┿━━━━━━━━━┥
│ Messi │ Barcelona FC │ 80 │
├──────────────────────┼────────────────┼─────────┤
│ Christiano Ronaldo │ Real Madrid │ 30 │
├──────────────────────┼────────────────┼─────────┤
│ Luiz Suarez │ Barcelona FC │ 50 │
└──────────────────────┴────────────────┴─────────┘
Elipses #
final Table tab = table(['Player', 'Team', 'Goals'])
..row(['Messi', 'Barcelona FC', 80])
..row(['Christiano Ronaldo', 'Real Madrid', 30])
..row(['Luiz Suarez', 'Barcelona FC', 50]);
tab.maxColWidths[0] = fixed(10);
tab.minColWidths[2] = fixed(10);
┌──────────┬────────────┬──────────┐
│Player │Team │Goals │
┝━━━━━━━━━━┿━━━━━━━━━━━━┿━━━━━━━━━━┥
│Messi │Barcelona FC│80 │
├──────────┼────────────┼──────────┤
│Christi...│Real Madrid │30 │
├──────────┼────────────┼──────────┤
│Luiz Su...│Barcelona FC│50 │
└──────────┴────────────┴──────────┘
No borders #
final Table tab = table(['Player', 'Team', 'Goals'],
globalPadding: pad(after: 5), border: Border.compact)
..row(['Messi', 'Barcelona FC', 80])
..row(['Christiano Ronaldo', 'Real Madrid', 30])
..row(['Luiz Suarez', 'Barcelona FC', 50]);
Player Team Goals
--------------------------------------------------
Messi Barcelona FC 80
Christiano Ronaldo Real Madrid 30
Luiz Suarez Barcelona FC 50
Border styles #
final Table tab = table(
['Player', 'Team', 'Goals'],
border: Border.doubleLines,
)
..row(['Messi', 'Barcelona FC', 80])
..row(['Christiano Ronaldo', 'Real Madrid', 30])
..row(['Luiz Suarez', 'Barcelona FC', 50]);
╔══════════════════╤════════════╤═════╗
║Player │Team │Goals║
╠══════════════════╪════════════╪═════╣
║Messi │Barcelona FC│80 ║
╟──────────────────┼────────────┼─────╢
║Christiano Ronaldo│Real Madrid │30 ║
╟──────────────────┼────────────┼─────╢
║Luiz Suarez │Barcelona FC│50 ║
╚══════════════════╧════════════╧═════╝
Out-of-the-box styles
TODO
Flex columns #
final Table tab = table(['Player', 'Team', 'Goals'],
width: 90,
colWidths: [flex(2), flex(1), fixed(5)],
maxColWidths: [fixed(22)],
globalPadding: padEven(1))
..row(['Messi', 'Barcelona FC', 80])
..row(['Christiano Ronaldo', 'Real Madrid', 30])
..row(['Luiz Suarez', 'Barcelona FC', 50]);
┌────────────────────────┬───────────────────────────────────────────────────────┬───────┐
│ Player │ Team │ Goals │
┝━━━━━━━━━━━━━━━━━━━━━━━━┿━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┿━━━━━━━┥
│ Messi │ Barcelona FC │ 80 │
├────────────────────────┼───────────────────────────────────────────────────────┼───────┤
│ Christiano Ronaldo │ Real Madrid │ 30 │
├────────────────────────┼───────────────────────────────────────────────────────┼───────┤
│ Luiz Suarez │ Barcelona FC │ 50 │
└────────────────────────┴───────────────────────────────────────────────────────┴───────┘