flex_grid

FlexGrid控件提供了一种强大且快速的方式以表格格式显示数据。它包含了冻结列/行、加载更多、高性能以及在 TabBarView/PageView 中更好的体验。

FrozenedRowColumn

TabView

HugeData

Excel

StockList

参数 描述 默认值
frozenedColumnsCount 冻结列的数量 0
frozenedRowsCount 冻结行的数量 0
cellBuilder 用于创建单元格的构建器 必需
cellBuilder 用于创建标题的构建器 必需
columnsCount 列的数量,它应该大于 0 必需
source [FlexGrid] 的数据源 必需
rowWrapper 在此回调中装饰行 widget
rebuildCustomScrollView 当数据源更改时重建,它来自 [LoadingMoreCustomScrollView]
控制器 垂直方向的 [ScrollController]
horizontalController 水平方向的 [SyncControllerMixin]
outerHorizontalSyncController 外部 [SyncControllerMixin],例如 [ExtendedTabBarView] 或 [ExtendedPageView]。它在水平方向滚动时提供更好的体验
physics 水平和垂直方向的滚动物理效果
highPerformance 如果为 true,则强制子项在滚动方向上具有给定的范围(单元格高度/宽度)。
headerStyle 描述如何创建标题的不可变样式 CellStyle.header()
cellStyle 描述如何创建单元格的不可变样式 CellStyle.cell()
indicatorBuilder 用于不同加载状态的 Widget 构建器,它来自 [LoadingMoreCustomScrollView]
extendedListDelegate 提供扩展的委托,它来自 [LoadingMoreCustomScrollView]
headersBuilder 用于自定义 [FlexGrid] 标题的构建器

source

[FlexGrid.source] 来自 loading_more_list,LoadingMoreBase 是用于加载更多的数据集合。重写 loadData 方法来加载你的数据。当没有更多数据时,将 hasMore 设置为 false。

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

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

  @override
  bool get hasMore => _pageIndex < 4;

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

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

rowWrapper

在此回调中装饰行 widget。

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

headersBuilder

您可以在此回调中添加任何其他标题。

    FlexGrid(
      headersBuilder: (BuildContext b, Widget header) {
        return <Widget>[
          header,
          SliverToBoxAdapter(
            child: PullToRefreshContainer(
                (PullToRefreshScrollNotificationInfo info) {
              return PullToRefreshHeader(
                info,
                source.lastRefreshTime,
              );
            }),
          ),
        ];
      },
    );

GitHub

https://github.com/fluttercandies/flex_grid