{"id":19273061,"url":"https://github.com/fluttercandies/flex_grid","last_synced_at":"2025-04-30T15:47:09.020Z","repository":{"id":56828894,"uuid":"381043225","full_name":"fluttercandies/flex_grid","owner":"fluttercandies","description":"The FlexGrid control provides a powerful and quickly way to display data in a tabular format. It is including that frozened column/row,loading more, high performance and better experience in TabBarView/PageView.","archived":false,"fork":false,"pushed_at":"2025-04-20T12:29:02.000Z","size":553,"stargazers_count":60,"open_issues_count":2,"forks_count":9,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-30T15:46:54.183Z","etag":null,"topics":["flexgrid","frozened","high-performance","loading-more"],"latest_commit_sha":null,"homepage":"","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/fluttercandies.png","metadata":{"files":{"readme":"README-ZH.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"custom":"http://zmtzawqlp.gitee.io/my_images/images/qrcode.png"}},"created_at":"2021-06-28T13:34:38.000Z","updated_at":"2025-04-20T12:29:05.000Z","dependencies_parsed_at":"2024-06-24T10:57:36.813Z","dependency_job_id":"5304e877-1825-44d8-b087-c0fd3c625746","html_url":"https://github.com/fluttercandies/flex_grid","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fluttercandies%2Fflex_grid","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fluttercandies%2Fflex_grid/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fluttercandies%2Fflex_grid/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fluttercandies%2Fflex_grid/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fluttercandies","download_url":"https://codeload.github.com/fluttercandies/flex_grid/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251734154,"owners_count":21635079,"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":["flexgrid","frozened","high-performance","loading-more"],"created_at":"2024-11-09T20:40:40.468Z","updated_at":"2025-04-30T15:47:09.009Z","avatar_url":"https://github.com/fluttercandies.png","language":"Dart","funding_links":["http://zmtzawqlp.gitee.io/my_images/images/qrcode.png"],"categories":[],"sub_categories":[],"readme":"# flex_grid\n\n[![pub package](https://img.shields.io/pub/v/flex_grid.svg)](https://pub.dartlang.org/packages/flex_grid) [![GitHub stars](https://img.shields.io/github/stars/fluttercandies/flex_grid)](https://github.com/fluttercandies/flex_grid/stargazers) [![GitHub forks](https://img.shields.io/github/forks/fluttercandies/flex_grid)](https://github.com/fluttercandies/flex_grid/network) [![GitHub license](https://img.shields.io/github/license/fluttercandies/flex_grid)](https://github.com/fluttercandies/flex_grid/blob/master/LICENSE) [![GitHub issues](https://img.shields.io/github/issues/fluttercandies/flex_grid)](https://github.com/fluttercandies/flex_grid/issues) \u003ca href=\"https://qm.qq.com/q/ZyJbSVjfSU\"\u003e![FlutterCandies QQ 群](https://img.shields.io/badge/dynamic/yaml?url=https%3A%2F%2Fraw.githubusercontent.com%2Ffluttercandies%2F.github%2Frefs%2Fheads%2Fmain%2Fdata.yml\u0026query=%24.qq_group_number\u0026label=QQ%E7%BE%A4\u0026logo=qq\u0026color=1DACE8)\n\nLanguage: [English](README.md)| 中文简体\n\nFlexGrid 可以帮助快速创建表格形式的视图。它支持锁定行列，增量加载，提供高性能，拥有在 TabbarView/PageView 中更好的滚动体验。\n\n\n|                                                                                                        |                                                                                                |                                                                                               |\n| ------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |\n| ![](https://github.com/fluttercandies/flutter_candies/blob/master/gif/flex_grid/FrozenedRowColumn.gif) | ![](https://github.com/fluttercandies/flutter_candies/blob/master/gif/flex_grid/TabView.gif)   | ![](https://github.com/fluttercandies/flutter_candies/blob/master/gif/flex_grid/HugeData.gif) |\n| ![](https://github.com/fluttercandies/flutter_candies/blob/master/gif/flex_grid/Excel.gif)             | ![](https://github.com/fluttercandies/flutter_candies/blob/master/gif/flex_grid/StockList.gif) |                                                                                               |\n\n\n\n\n| 参数                                              | 描述                                                                                                         | 默认               |\n| ------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | ------------------ |\n| frozenedColumnsCount                              | 锁定列的个数                                                                                                 | 0                  |\n| frozenedRowsCount                                 | 锁定行的个数                                                                                                 | 0                  |\n| cellBuilder                                       | 用于创建表格的回调                                                                                           | required           |\n| headerBuilder                                     | 用于创建表头的回调                                                                                           | required           |\n| columnsCount                                      | 列的个数，必须大于0                                                                                          | required           |\n| [source](#source)                                 | [FlexGrid] 的数据源                                                                                          | required           |\n| [rowWrapper](#rowWrapper)                         | 在这个回调里面用于装饰 row Widget                                                                            | null               |\n| rebuildCustomScrollView                           | 当数据源改变的时候是否重新 build ， 它来自 [LoadingMoreCustomScrollView]                                     | false              |\n| controller                                        | 垂直方向的 [ScrollController]                                                                                | null               |\n| horizontalController                              | 水平方向的 [SyncControllerMixin]                                                                             | null               |\n| outerHorizontalSyncController                     | 外部的 [SyncControllerMixin], 用在 [ExtendedTabBarView] 或者 [ExtendedPageView] 上面，让水平方法的滚动更连续 | null               |\n| physics                                           | 水平和垂直方法的  [ScrollPhysics]                                                                            | null               |\n| verticalHighPerformance/horizontalHighPerformance | 如果为true的话,  将强制水平和垂直元素的大小，以提高滚动的性能                                                | false              |\n| headerStyle                                       | 样式用于来描述表头                                                                                           | CellStyle.header() |\n| cellStyle                                         | 样式用于来描述表格                                                                                           | CellStyle.cell()   |\n| indicatorBuilder                                  | 用于创建不同加载状态的回调, 它来自  [LoadingMoreCustomScrollView]                                            | null               |\n| extendedListDelegate                              | 用于设置一些扩展功能的设置, 它来自  [LoadingMoreCustomScrollView]                                            | null               |\n| [headersBuilder](#headersbuilder)                 | 用于创建自定义的表头                                                                                         | null               |\n| link                                              | 等设置为 true 的时候， [FlexGrid] 不能滚动，则会去滚动 parent [ExtendedTabView]                              | false              |\n\n\n## source\n\n[FlexGrid.source] 来自组件 [loading_more_list](https://github.com/fluttercandies/loading_more_list), 你需要继承LoadingMoreBase 来实现加载更多的数据源. 通过重写 loadData 方法来加载数据. 当没有数据的时候记得把 hasMore 设置为 false.\n\n```dart\nclass FlexGridSource extends LoadingMoreBase\u003cGridRow\u003e {\n  int _pageIndex = 1;\n\n  void _load() {\n    for (int i = 0; i \u003c 15; i++) {\n      add(GridRow(name: 'index:$_pageIndex-$i'));\n    }\n  }\n\n  @override\n  bool get hasMore =\u003e _pageIndex \u003c 4;\n\n  @override\n  Future\u003cbool\u003e loadData([bool isloadMoreAction = false]) async {\n    await Future\u003cvoid\u003e.delayed(const Duration(seconds: 2));\n    _load();\n    _pageIndex++;\n    return true;\n  }\n\n  @override\n  Future\u003cbool\u003e refresh([bool notifyStateChanged = false]) async {\n    _pageIndex = 1;\n    return super.refresh(notifyStateChanged);\n  }\n}\n```\n\n## rowWrapper\n\n在这个回调里面可以用于装饰每一行 Widget\n\n``` dart\n    FlexGrid(\n      rowWrapper: (\n        BuildContext context,\n        T data,\n        int row,\n        Widget child,\n      ) {\n        return Column(\n          children: \u003cWidget\u003e[\n            child,\n            const Divider(),\n          ],\n        );\n      },\n    );\n```\n\n\n## headersBuilder\n\n用于创建自定义的表头\n\n``` dart\n    FlexGrid(\n      headersBuilder: (BuildContext b, Widget header) {\n        return \u003cWidget\u003e[\n          header,\n          SliverToBoxAdapter(\n            child: PullToRefreshContainer(\n                (PullToRefreshScrollNotificationInfo info) {\n              return PullToRefreshHeader(\n                info,\n                source.lastRefreshTime,\n              );\n            }),\n          ),\n        ];\n      },\n    );\n``` ","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffluttercandies%2Fflex_grid","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffluttercandies%2Fflex_grid","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffluttercandies%2Fflex_grid/lists"}