pub package GitHub stars GitHub forks GitHub license GitHub issues flutter-candies

Language: English| 中文简体

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.

parameter description default
frozenedColumnsCount The count of forzened columns 0
frozenedRowsCount The count of forzened rows 0
cellBuilder The builder to create cell required
cellBuilder The builder to create header required
columnsCount The count of columns, it should big than 0 required
source The data source of FlexGrid required
rowWrapper decorate row widget in this call back null
rebuildCustomScrollView rebuild when source is changed, It's from LoadingMoreCustomScrollView false
controller The ScrollController on vertical direction null
horizontalController The SyncControllerMixin for horizontal direction null
outerHorizontalSyncController The Outer SyncControllerMixin, for example ExtendedTabBarView or ExtendedPageView. It make better experience when scroll on horizontal direction null
physics The physics on both horizontal and vertical direction null
verticalHighPerformance/horizontalHighPerformance If true, forces the children to have the given extent(Cell height/width) in the scroll direction. false
headerStyle An immutable style describing how to create header CellStyle.header()
cellStyle An immutable style describing how to create cell CellStyle.cell()
indicatorBuilder Widget builder for different loading state, it's from LoadingMoreCustomScrollView null
extendedListDelegate A delegate that provides extensions, it's from LoadingMoreCustomScrollView null
headersBuilder The builder to custom the headers of FlexGrid null
link if link is true, scroll parent ExtendedTabView when FlexGrid is over scroll false


FlexGrid.source is form loading_more_list, LoadingMoreBase is data collection for loading more. override loadData method to load your data. set hasMore to false when it has no more data.

class FlexGridSource extends LoadingMoreBase<GridRow> {
  int _pageIndex = 1;

  void _load() {
    for (int i = 0; i < 15; i++) {
      add(GridRow(name: 'index:$_pageIndex-$i'));

  bool get hasMore => _pageIndex < 4;

  Future<bool> loadData([bool isloadMoreAction = false]) async {
    await Future<void>.delayed(const Duration(seconds: 2));
    return true;

  Future<bool> refresh([bool notifyStateChanged = false]) async {
    _pageIndex = 1;
    return super.refresh(notifyStateChanged);


decorate row widget in this call back.

      rowWrapper: (
        BuildContext context,
        T data,
        int row,
        Widget child,
      ) {
        return Column(
          children: <Widget>[
            const Divider(),


you can add anyother headers in this call back.

      headersBuilder: (BuildContext b, Widget header) {
        return <Widget>[
            child: PullToRefreshContainer(
                (PullToRefreshScrollNotificationInfo info) {
              return PullToRefreshHeader(