{"id":21206207,"url":"https://github.com/rtmigo/tabular_dart","last_synced_at":"2025-07-10T08:33:01.182Z","repository":{"id":59377654,"uuid":"349573559","full_name":"rtmigo/tabular_dart","owner":"rtmigo","description":"Dart library for displaying tabular data in a visually appealing ASCII table format.","archived":false,"fork":false,"pushed_at":"2021-11-23T09:46:51.000Z","size":160,"stargazers_count":8,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2023-10-01T15:53:18.014Z","etag":null,"topics":["ascii","dart","data","flutter","formatting","github","markdown","prettytable","pubdev","readme","spreadsheet","table","tabulate"],"latest_commit_sha":null,"homepage":"https://pub.dev/packages/tabular","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rtmigo.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-03-19T22:47:16.000Z","updated_at":"2023-10-01T15:53:18.015Z","dependencies_parsed_at":"2022-09-16T05:09:46.129Z","dependency_job_id":null,"html_url":"https://github.com/rtmigo/tabular_dart","commit_stats":null,"previous_names":[],"tags_count":14,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rtmigo%2Ftabular_dart","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rtmigo%2Ftabular_dart/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rtmigo%2Ftabular_dart/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rtmigo%2Ftabular_dart/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rtmigo","download_url":"https://codeload.github.com/rtmigo/tabular_dart/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225629877,"owners_count":17499294,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ascii","dart","data","flutter","formatting","github","markdown","prettytable","pubdev","readme","spreadsheet","table","tabulate"],"created_at":"2024-11-20T20:54:47.209Z","updated_at":"2024-11-20T20:54:47.843Z","avatar_url":"https://github.com/rtmigo.png","language":"Dart","readme":"# [Tabular](https://github.com/rtmigo/tabular_dart#tabular)\n\nDart library for displaying tabular data in a visually appealing \nASCII table format.\n\nIt converts a two-dimensional array of cells into a string with a text\ntable.\n\nTabular is specifically designed to create tables in the Markdown format that \nGitHub understands.\n\nThe library is inspired by python's [tabulate](https://pypi.org/project/tabulate/) \nand [pretty_table](https://pypi.org/project/prettytable/). \n\n----\n\n\n```dart\nimport 'package:tabular/tabular.dart';\n\nvar data = [\n    ['Season', '#', 'Name', 'Days', 'Sun'],\n    ['Winter', 1, 'January', 31, 94],\n    ['Winter', 2, 'February', 28, 123],\n    ['Spring', 3, 'March', 31, 42],\n    ['Spring', 4, 'April', 30, 243],\n    ['Spring', 5, 'May', 31, 5523],\n    ['Summer', 6, 'June', 30, 11251],\n    ['Summer', 7, 'July', 31, 17451],\n    ['Summer', 8, 'August', 31, 18707],\n    ['Autumn', 9, 'September', 30, 7025],\n    ['Autumn', 10, 'October', 31, 5041],\n    ['Autumn', 11, 'November', 30, 2302],\n    ['Winter', 12, 'December', 31, 258],\n];\n\nvar string = tabular(data);\n\nprint(string);\n```\n\n```text\nSeason |  # | Name      | Days |   Sun\n-------|----|-----------|------|------\nWinter |  1 | January   |   31 |    94\nWinter |  2 | February  |   28 |   123\nSpring |  3 | March     |   31 |    42\nSpring |  4 | April     |   30 |   243\nSpring |  5 | May       |   31 |  5523\nSummer |  6 | June      |   30 | 11251\nSummer |  7 | July      |   31 | 17451\nSummer |  8 | August    |   31 | 18707\nAutumn |  9 | September |   30 |  7025\nAutumn | 10 | October   |   31 |  5041\nAutumn | 11 | November  |   30 |  2302\nWinter | 12 | December  |   31 |   258\n```\n\n\n# Formatting\n\n## Modify alignment\n\n```dart\ntabular(data, align: {'Name': Side.center, 'Sun': Side.start})\n```\n\n```text\nSeason |  # |    Name   | Days | Sun  \n-------|----|-----------|------|------\nWinter |  1 |  January  |   31 | 94   \nWinter |  2 |  February |   28 | 123  \nSpring |  3 |   March   |   31 | 42   \nSpring |  4 |   April   |   30 | 243  \nSpring |  5 |    May    |   31 | 5523 \nSummer |  6 |    June   |   30 | 11251\nSummer |  7 |   July    |   31 | 17451\nSummer |  8 |   August  |   31 | 18707\nAutumn |  9 | September |   30 | 7025 \nAutumn | 10 |  October  |   31 | 5041 \nAutumn | 11 | November  |   30 | 2302 \nWinter | 12 |  December |   31 | 258  \n```\n\n## Add markdown ':' alignment marks\n\n```dart\ntabular(data, markdownAlign: true)\n```\n\n```text\nSeason |  # | Name      | Days |   Sun\n-------|---:|-----------|-----:|-----:\nWinter |  1 | January   |   31 |    94\nWinter |  2 | February  |   28 |   123\nSpring |  3 | March     |   31 |    42\nSpring |  4 | April     |   30 |   243\nSpring |  5 | May       |   31 |  5523\nSummer |  6 | June      |   30 | 11251\nSummer |  7 | July      |   31 | 17451\nSummer |  8 | August    |   31 | 18707\nAutumn |  9 | September |   30 |  7025\nAutumn | 10 | October   |   31 |  5041\nAutumn | 11 | November  |   30 |  2302\nWinter | 12 | December  |   31 |   258\n```\n\n## Add horizontal dividers\n\n```dart\ntabular(data, rowDividers: [1, 3, 6, 9, 12])\n```\n\n```text\nSeason |  # | Name      | Days |   Sun\n-------|----|-----------|------|------\nWinter |  1 | January   |   31 |    94\nWinter |  2 | February  |   28 |   123\n-------|----|-----------|------|------\nSpring |  3 | March     |   31 |    42\nSpring |  4 | April     |   30 |   243\nSpring |  5 | May       |   31 |  5523\n-------|----|-----------|------|------\nSummer |  6 | June      |   30 | 11251\nSummer |  7 | July      |   31 | 17451\nSummer |  8 | August    |   31 | 18707\n-------|----|-----------|------|------\nAutumn |  9 | September |   30 |  7025\nAutumn | 10 | October   |   31 |  5041\nAutumn | 11 | November  |   30 |  2302\n-------|----|-----------|------|------\nWinter | 12 | December  |   31 |   258\n```\n\nPlease be aware that dividers can make the table not conform to the \nMarkdown standard.\n\n## Add outer border\n\n```dart\ntabular(data, border: Border.vertical);\n```\n\n```text\n| Season |  # | Name      | Days |   Sun |\n|--------|----|-----------|------|-------|\n| Winter |  1 | January   |   31 |    94 |\n| Winter |  2 | February  |   28 |   123 |\n| Spring |  3 | March     |   31 |    42 |\n| Spring |  4 | April     |   30 |   243 |\n| Spring |  5 | May       |   31 |  5523 |\n| Summer |  6 | June      |   30 | 11251 |\n| Summer |  7 | July      |   31 | 17451 |\n| Summer |  8 | August    |   31 | 18707 |\n| Autumn |  9 | September |   30 |  7025 |\n| Autumn | 10 | October   |   31 |  5041 |\n| Autumn | 11 | November  |   30 |  2302 |\n| Winter | 12 | December  |   31 |   258 |\n```\n\nIn the same way, you can add `Border.horizontal` or `Border.all`. But it can \nmake the table not conform to the Markdown standard.\n\n## Switch border style\n\n``` dart\ntabular(data, style: Style.mysql, border: Border.all)\n```\n\n``` text\n+--------+----+-----------+------+-------+\n| Season |  # | Name      | Days |   Sun |\n+--------+----+-----------+------+-------+\n| Winter |  1 | January   |   31 |    94 |\n| Winter |  2 | February  |   28 |   123 |\n| Spring |  3 | March     |   31 |    42 |\n| Spring |  4 | April     |   30 |   243 |\n| Spring |  5 | May       |   31 |  5523 |\n| Summer |  6 | June      |   30 | 11251 |\n| Summer |  7 | July      |   31 | 17451 |\n| Summer |  8 | August    |   31 | 18707 |\n| Autumn |  9 | September |   30 |  7025 |\n| Autumn | 10 | October   |   31 |  5041 |\n| Autumn | 11 | November  |   30 |  2302 |\n| Winter | 12 | December  |   31 |   258 |\n+--------+----+-----------+------+-------+\n```\n\n\n## Custom column formatting\n\n``` dart\ntabular(data, \n    format: {\n        'Name': (value) =\u003e value.toUpperCase(), \n        'Sun': (value) =\u003e '+ '+value.toString() })\n```\n\n``` text\nSeason |  # | Name      | Days |     Sun\n-------|----|-----------|------|--------\nWinter |  1 | JANUARY   |   31 |    + 94\nWinter |  2 | FEBRUARY  |   28 |   + 123\nSpring |  3 | MARCH     |   31 |    + 42\nSpring |  4 | APRIL     |   30 |   + 243\nSpring |  5 | MAY       |   31 |  + 5523\nSummer |  6 | JUNE      |   30 | + 11251\nSummer |  7 | JULY      |   31 | + 17451\nSummer |  8 | AUGUST    |   31 | + 18707\nAutumn |  9 | SEPTEMBER |   30 |  + 7025\nAutumn | 10 | OCTOBER   |   31 |  + 5041\nAutumn | 11 | NOVEMBER  |   30 |  + 2302\nWinter | 12 | DECEMBER  |   31 |   + 258\n```\n\n\n\n# Sorting\n\n## Sort alphabetically by column 0\n\n``` dart\ntabular(data, sort: [Sort(0)]) // 0 is 'Season'\n```\n\n``` text\nSeason |  # | Name      | Days |   Sun\n-------|----|-----------|------|------\nAutumn |  9 | September |   30 |  7025\nAutumn | 10 | October   |   31 |  5041\nAutumn | 11 | November  |   30 |  2302\nSpring |  3 | March     |   31 |    42\nSpring |  4 | April     |   30 |   243\nSpring |  5 | May       |   31 |  5523\nSummer |  6 | June      |   30 | 11251\nSummer |  7 | July      |   31 | 17451\nSummer |  8 | August    |   31 | 18707\nWinter |  1 | January   |   31 |    94\nWinter |  2 | February  |   28 |   123\nWinter | 12 | December  |   31 |   258\n```\n\n## Sort by 'Days' descending, and then by 'Sun' ascending\n\n``` dart\ntabular(data, sort: [Sort('Days', ascending: false), Sort('Sun')])\n```\n\n``` text\nSeason |  # | Name      | Days |   Sun\n-------|----|-----------|------|------\nSpring |  3 | March     |   31 |    42\nWinter |  1 | January   |   31 |    94\nWinter | 12 | December  |   31 |   258\nAutumn | 10 | October   |   31 |  5041\nSpring |  5 | May       |   31 |  5523\nSummer |  7 | July      |   31 | 17451\nSummer |  8 | August    |   31 | 18707\nSpring |  4 | April     |   30 |   243\nAutumn | 11 | November  |   30 |  2302\nAutumn |  9 | September |   30 |  7025\nSummer |  6 | June      |   30 | 11251\nWinter |  2 | February  |   28 |   123\n```\n\n## Sort with custom comparison\n\nOrdering the rows by the length of the month name.\n\n``` dart\ntabular(data, \n    sort: [Sort('Name', compare: (a, b) =\u003e a.length.compareTo(b.length))])\n```\n\n``` text\nSeason |  # | Name      | Days |   Sun\n-------|----|-----------|------|------\nSpring |  5 | May       |   31 |  5523\nSummer |  6 | June      |   30 | 11251\nSummer |  7 | July      |   31 | 17451\nSpring |  3 | March     |   31 |    42\nSpring |  4 | April     |   30 |   243\nSummer |  8 | August    |   31 | 18707\nWinter |  1 | January   |   31 |    94\nAutumn | 10 | October   |   31 |  5041\nWinter |  2 | February  |   28 |   123\nAutumn | 11 | November  |   30 |  2302\nWinter | 12 | December  |   31 |   258\nAutumn |  9 | September |   30 |  7025\n```","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frtmigo%2Ftabular_dart","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frtmigo%2Ftabular_dart","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frtmigo%2Ftabular_dart/lists"}