{"id":17650842,"url":"https://github.com/rickypid/flutter_expandable_table","last_synced_at":"2025-04-07T10:25:29.227Z","repository":{"id":38299274,"uuid":"387720843","full_name":"rickypid/flutter_expandable_table","owner":"rickypid","description":"A Flutter widget for create an expandable table with header and first column fixed.","archived":false,"fork":false,"pushed_at":"2024-11-15T10:31:12.000Z","size":5655,"stargazers_count":43,"open_issues_count":3,"forks_count":35,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-31T08:12:06.578Z","etag":null,"topics":["dart","datatable","datatables","datatables-plugin","expandable","expandable-datatable","expandable-table","flutter","flutter-package","flutter-widget","table","widget-ui"],"latest_commit_sha":null,"homepage":"https://pub.dev/packages/flutter_expandable_table","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rickypid.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"rickypid","custom":"https://buymeacoffee.com/veweju"}},"created_at":"2021-07-20T08:13:32.000Z","updated_at":"2025-03-08T08:49:37.000Z","dependencies_parsed_at":"2025-01-01T21:11:46.174Z","dependency_job_id":"2987a7f0-7b04-4d7c-b96e-a3a7e225fdce","html_url":"https://github.com/rickypid/flutter_expandable_table","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rickypid%2Fflutter_expandable_table","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rickypid%2Fflutter_expandable_table/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rickypid%2Fflutter_expandable_table/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rickypid%2Fflutter_expandable_table/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rickypid","download_url":"https://codeload.github.com/rickypid/flutter_expandable_table/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247633571,"owners_count":20970349,"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":["dart","datatable","datatables","datatables-plugin","expandable","expandable-datatable","expandable-table","flutter","flutter-package","flutter-widget","table","widget-ui"],"created_at":"2024-10-23T11:39:33.940Z","updated_at":"2025-04-07T10:25:29.195Z","avatar_url":"https://github.com/rickypid.png","language":"Dart","funding_links":["https://github.com/sponsors/rickypid","https://buymeacoffee.com/veweju"],"categories":[],"sub_categories":[],"readme":"#### flutter_expandable_table\n# Expandable Table\n\n[![](https://img.shields.io/static/v1?label=flutter\u0026message=flutter_expandable_table\u0026color=red??style=for-the-badge\u0026logo=GitHub)](https://github.com/rickypid/flutter_expandable_table)\n[![Pub Package](https://img.shields.io/pub/v/flutter_expandable_table.svg?style=flat-square)](https://pub.dartlang.org/packages/flutter_expandable_table)\n[![Pub Points](https://img.shields.io/pub/points/flutter_expandable_table)](https://pub.dev/packages/flutter_expandable_table/score)\n[![Pub Likes](https://img.shields.io/pub/likes/flutter_expandable_table)](https://pub.dev/packages/flutter_expandable_table/score)\n\n[![Package Issue](https://img.shields.io/github/issues/rickypid/flutter_expandable_table)](https://github.com/rickypid/flutter_expandable_table/issues)\n![Package License](https://img.shields.io/github/license/rickypid/flutter_expandable_table)\n\n`ExpandableTable` is a widget for Flutter that create a Table with header and first column fixed. You can create a nested Rows/Columns grouped in expandable Row/Column\n\n| ![Image](https://github.com/rickypid/flutter_expandable_table/blob/master/doc/media/example.gif?raw=true) |\n| :------------: |\n| **ExpandableTable** |\n\n## Features\n\n* Header and first column fixed\n* Supports vertical and horizontal scroll\n* Customizable animation Duration and Curve\n* Specific height definition for each single row\n* Specific width definition for each single column\n* Access to cell address when building cell content\n* Access to the parent rows and columns of the cell while building the contents of a cell\n\n\u0026nbsp;\n\n## Usage\nMake sure to check out the [examples on GitHub](https://github.com/rickypid/flutter_expandable_table/tree/master/example).\n\n### Installation\n\nAdd the following line to `pubspec.yaml`:\n\n```yaml\ndependencies:\n  flutter_expandable_table: \u003clast-release\u003e\n```\n\n### Basic setup\n\n*Complete example [available here](https://github.com/rickypid/flutter_expandable_table/blob/master/example/lib/main.dart).*\n\n```dart\n     return ExpandableTable(\n      firstHeaderCell: ExpandableTableCell(\n        child: Text('Simple\\nTable'),\n      ),\n      headers: headers,\n      rows: rows,\n    );\n```\n\n### Use with the controller\n\nYou can create an external controller to be able to dynamically manage the table, for example to add or remove rows within it.\n\nHere is an example:\n\n```dart\n    //... Inside Widget State\n    late ExpandableTableController controller;\n    //....\n    @override\n    void initState() {\n      controller = ExpandableTableController(\n        firstHeaderCell: ExpandableTableCell(child: Container()),\n        headers: [],\n        rows: [],\n        headerHeight: 263,\n        defaultsColumnWidth: 200,\n        firstColumnWidth: 300,\n        scrollShadowColor: AppColors.black,\n      );\n      super.initState();\n    }\n    void _onEvent(){    \n      controller.rows.add(...your code...);\n    }\n    @override\n    Widget build(BuildContext context) {\n      return ExpandableTable(\n        controller: controller,\n      );\n    }\n//....\n```\n\n### ExpandableTable Properties\n* `firstHeaderCell`: Is the top left cell, i.e. the first header cell.\n* `headers`: contains the list of all column headers, each one of these can contain a list of further headers, this allows you to create nested and expandable columns.\n* `rows`: contains the list of all the rows of the table, each of these can contain a list of further rows, this allows you to create nested and expandable rows.\n* `headerHeight`: is the height of each column header, i.e. the first row.\n* `firstColumnWidth`: determines first Column width size.\n* `defaultsColumnWidth`: defines the default width of all columns, it is possible to redefine it for each individual column.\n* `defaultsRowHeight`: defines the default height of all rows, it is possible to redefine it for every single row.\n* `duration`: determines duration rendered animation of Rows/Columns expansion.\n* `curve`: determines rendered curve animation of Rows/Columns expansion.\n* `scrollShadowDuration`: determines duration rendered animation of shadows.\n* `scrollShadowFadeInCurve`: determines rendered curve animation of shadows appearance.\n* `scrollShadowFadeOutCurve`: determines rendered curve animation of shadows disappearance.\n* `scrollShadowColor`: determines rendered color of shadows.\n* `scrollShadowSize`: determines size of shadows.\n* `visibleScrollbar`: determines visibility of horizontal and vertical scrollbars.\n* `trackVisibilityScrollbar`: indicates that the scrollbar track should be visible.\n* `thumbVisibilityScrollbar`: indicates that the scrollbar thumb should be visible, even when a scroll is not underway.\n* `expanded`: indicates that the table expands, so it fills the available space along the horizontal and vertical axes.\n\n\u0026nbsp;\n\n## 📚 My open source projects\n\n### Flutter\n\n| Package | Verison | Score | Likes | Test | Coverage |\n|--|--|--|--|--|--|\n| [![](https://img.shields.io/static/v1?label=flutter\u0026message=flutter_expandable_table\u0026color=red??style=for-the-badge\u0026logo=GitHub)](https://github.com/rickypid/flutter_expandable_table) | [![Pub Package](https://img.shields.io/pub/v/flutter_expandable_table.svg?style=flat-square)](https://pub.dartlang.org/packages/flutter_expandable_table) | [![Pub Points](https://img.shields.io/pub/points/flutter_expandable_table)](https://pub.dev/packages/flutter_expandable_table/score) | [![Pub Likes](https://img.shields.io/pub/likes/flutter_expandable_table)](https://pub.dev/packages/flutter_expandable_table/score) |  |  |\n| [![](https://img.shields.io/static/v1?label=flutter\u0026message=widget_tree_depth_counter\u0026color=red??style=for-the-badge\u0026logo=GitHub)](https://github.com/rickypid/widget_tree_depth_counter) | [![Pub Package](https://img.shields.io/pub/v/widget_tree_depth_counter.svg?style=flat-square)](https://pub.dartlang.org/packages/widget_tree_depth_counter) | [![Pub Points](https://img.shields.io/pub/points/widget_tree_depth_counter)](https://pub.dev/packages/widget_tree_depth_counter/score) | [![Pub Likes](https://img.shields.io/pub/likes/widget_tree_depth_counter)](https://pub.dev/packages/widget_tree_depth_counter/score) |  |  |\n| [![](https://img.shields.io/static/v1?label=flutter\u0026message=flutter_scroll_shadow\u0026color=red??style=for-the-badge\u0026logo=GitHub)](https://github.com/rickypid/flutter_scroll_shadow) | [![Pub Package](https://img.shields.io/pub/v/flutter_scroll_shadow.svg?style=flat-square)](https://pub.dartlang.org/packages/flutter_scroll_shadow) | [![Pub Points](https://img.shields.io/pub/points/flutter_scroll_shadow)](https://pub.dev/packages/flutter_scroll_shadow/score) | [![Pub Likes](https://img.shields.io/pub/likes/flutter_scroll_shadow)](https://pub.dev/packages/flutter_scroll_shadow/score) |  |  |\n| [![](https://img.shields.io/static/v1?label=flutter\u0026message=flutter_bargraph\u0026color=red??style=for-the-badge\u0026logo=GitHub)](https://github.com/rickypid/flutter_bargraph) | [![Pub Package](https://img.shields.io/pub/v/flutter_bargraph.svg?style=flat-square)](https://pub.dartlang.org/packages/flutter_bargraph) | [![Pub Points](https://img.shields.io/pub/points/flutter_bargraph)](https://pub.dev/packages/flutter_bargraph/score) | [![Pub Likes](https://img.shields.io/pub/likes/flutter_bargraph)](https://pub.dev/packages/flutter_bargraph/score) |  |  |\n\n\n### Dart\n\n| Package | Verison | Score | Likes | Test | Coverage |\n|--|--|--|--|--|--|\n| [![](https://img.shields.io/static/v1?label=dart\u0026message=cowsay\u0026color=red??style=for-the-badge\u0026logo=GitHub)](https://github.com/rickypid/cowsay) | [![Pub Package](https://img.shields.io/pub/v/cowsay.svg?style=flat-square)](https://pub.dartlang.org/packages/cowsay) | [![Pub Points](https://img.shields.io/pub/points/cowsay)](https://pub.dev/packages/cowsay/score) | [![Pub Likes](https://img.shields.io/pub/likes/cowsay)](https://pub.dev/packages/cowsay/score) | [![Test CI](https://github.com/rickypid/cowsay/actions/workflows/test.yml/badge.svg)](https://github.com/rickypid/cowsay/actions/workflows/test.yml) | [![codecov](https://codecov.io/gh/rickypid/cowsay/branch/master/graph/badge.svg?token=Z65KEB9SAX)](https://codecov.io/gh/rickypid/cowsay) |\n| [![](https://img.shields.io/static/v1?label=dart\u0026message=telegram_link\u0026color=red??style=for-the-badge\u0026logo=GitHub)](https://github.com/rickypid/telegram_link) | [![Pub Package](https://img.shields.io/pub/v/telegram_link.svg?style=flat-square)](https://pub.dartlang.org/packages/telegram_link) | [![Pub Points](https://img.shields.io/pub/points/telegram_link)](https://pub.dev/packages/telegram_link/score) | [![Pub Likes](https://img.shields.io/pub/likes/telegram_link)](https://pub.dev/packages/telegram_link/score) | [![Test CI](https://github.com/rickypid/telegram_link/actions/workflows/test.yml/badge.svg)](https://github.com/rickypid/telegram_link/actions/workflows/test.yml) | [![codecov](https://codecov.io/gh/rickypid/telegram_link/branch/main/graph/badge.svg?token=Z65KEB9SAX)](https://codecov.io/gh/rickypid/telegram_link) |","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frickypid%2Fflutter_expandable_table","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frickypid%2Fflutter_expandable_table","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frickypid%2Fflutter_expandable_table/lists"}