material_table_view
这是一个开源的 Flutter 包,包含一个小部件,可以在一个可垂直和水平滚动的 Material 风格表格中显示您的数据,该表格具有固定宽度的可冻结列,可根据屏幕尺寸动态调整,并支持数十亿行按需构建。此包优先考虑可用性和视觉一致性。
![]() |
![]() |
| 此演示使用了包中包含的闪烁效果。此演示的源代码包含在包示例中,可在此处 获取。 | |
功能
- 可水平和垂直滚动,这意味着行和列都可以滚动,以便向用户显示大量数据。
- 固定宽度的列,可以冻结,这意味着当列会滚出屏幕时,它会被固定在左侧或右侧。这有助于用户在水平滚动时不会丢失标识行的信息。列会在水平空间不足时根据开发人员定义的冻结优先级自动解冻,这意味着表格可以适应任何屏幕尺寸,无论是手机还是桌面。
- 固定列属性,该属性会导致冻结列滚动出边缘,但在另一方向滚动时重新出现,以在水平空间有限时节省空间。
- 按需构建的固定高度行,允许一个表格中包含数十亿行。
- 支持自定义的单个行小部件包装器,允许开发人员将每一行包装在 InkWell 中,同时包含行内的所有单元格小部件,从而在行内实现许多 Material 交互。
- 支持占位符行。
- 支持自定义的可选动画占位符行着色,使着色器可以依赖于垂直滚动偏移,并在任何占位符可见或不可见时开始或停止动画。
- 包含的闪烁着色器允许将动画线性渐变应用于占位符行。
- 滚动行为由应用程序主题定义,包括滚动物理、滚动效果等。这意味着如果您没有覆盖它,将默认使用平台默认的滚动行为。
- 分隔线动画:当一列滚动到另一列下方,该列在屏幕边缘冻结时,一条抖动的分隔线将动画显示,指示用户列已分离,还有更多内容可滚动。
- 支持水平滚动的表头和表尾。
- SliverTableView - 表格视图的 sliver 变体,可以与 CustomScrollView 中的其他 slivers(包括其他 SliverTableView 实例)一起使用,由单个视图垂直滚动。它具有固定的表头和表尾,以及与常规表格视图相同的功能。
用法
TableView.builder(
columns: [
// TODO specify columns
const TableColumn(
width: 56.0,
freezePriority: 100,
),
for (var i = 1; i < 100; i++)
const TableColumn(width: 64), // TODO specify freezePriority to freeze a column
],
rowCount: 1048576, // TODO specify row count
rowHeight: 56.0, // TODO specify row height
rowBuilder: (context, row, contentBuilder) {
// TODO fetch row data
return InkWell(
onTap: () => print('Row $row clicked'),
child: contentBuilder(
context,
(context, column) => Text('$column'), // TODO build a cell widget
),
);
},
// TODO specify other parameters for other features
),
限制
行包装小部件限制
并非所有小部件都可以用作 rowBuilder 和 placeholderBuilder 函数中构建的行小部件。任何可能需要使用组合的小部件都将导致异常或无法按预期工作。这包括 RepaintBoundary、Opacity、ShaderMask、 clipping widgets 等小部件。Material 小部件只能与指定类型的 MaterialType.transparency 一起使用,这是唯一不需要组合的类型。对于其中一些,包提供了特殊替代方案,可以用于(且仅用于)该目的。
-
TableRowOpacity- `Opacity` 小部件的替代品; -
TableRowFadeTransition- `FadeTransition` 小部件的替代品; -
tableRowDefaultAnimatedSwitcherTransitionBuilder函数 - 替代品
用于 `AnimatedSwitcher.defaultTransitionBuilder` 函数
可以用作 `AnimatedSwitcher` 的 `transitionBuilder`,在这种情况下
默认的将无法工作。如果您需要任何替代方案不可用,
请随时使用 问题跟踪器。
在行上方绘图可能无法按预期工作。
这些限制 **不** 适用于由 `cellBuilder` 闭包构建的单元格小部件。
这些限制是由于表格小部件绘制中涉及的自定义组合,用于优化目的。

