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





| 参数 | 描述 | 默认值 |
|---|---|---|
| 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,
);
}),
),
];
},
);