Flutter DataTable如何使用

在Flutter中如何使用DataTable组件?我想实现一个带有排序和分页功能的表格,但官方文档的示例比较简单,不太清楚如何自定义样式和添加交互功能。具体有几个问题:

  1. 如何修改表头的背景色和文字样式?
  2. 怎样实现点击表头排序的功能?
  3. 当数据量很大时,如何添加分页功能?
  4. 能否在表格中嵌入自定义的小部件,比如按钮或图标?

希望能有详细的代码示例说明,谢谢!

2 回复

Flutter DataTable 用于展示表格数据。需引入 DataTable 组件,设置 columns 定义列,rows 填充数据。每行使用 DataRow,每列使用 DataCell。支持排序、选择和交互。示例:

DataTable(
  columns: [
    DataColumn(label: Text('姓名')),
    DataColumn(label: Text('年龄')),
  ],
  rows: [
    DataRow(cells: [
      DataCell(Text('张三')),
      DataCell(Text('25')),
    ]),
  ],
)

更多关于Flutter DataTable如何使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


Flutter 中的 DataTable 用于显示表格数据,支持排序、选择和行操作。以下是基本用法和关键属性:

基本结构

DataTable(
  columns: [
    DataColumn(label: Text('姓名')),
    DataColumn(label: Text('年龄')),
  ],
  rows: [
    DataRow(cells: [
      DataCell(Text('张三')),
      DataCell(Text('25')),
    ]),
    DataRow(cells: [
      DataCell(Text('李四')),
      DataCell(Text('30')),
    ]),
  ],
)

核心属性

  1. columns:定义表头(DataColumn 列表)

    • label:列标题
    • numeric:数字对齐(默认为 false)
    • onSort:排序回调
  2. rows:数据行(DataRow 列表)

    • cells:数据单元格(DataCell 列表)
    • selected:行选中状态
    • onSelectChanged:选中状态回调

完整示例(含交互)

class MyTable extends StatefulWidget {
  @override
  _MyTableState createState() => _MyTableState();
}

class _MyTableState extends State<MyTable> {
  List<Map<String, dynamic>> _data = [
    {'name': '张三', 'age': 25, 'selected': false},
    {'name': '李四', 'age': 30, 'selected': false},
  ];

  @override
  Widget build(BuildContext context) {
    return SingleChildScrollView(
      scrollDirection: Axis.horizontal,
      child: DataTable(
        columns: [
          DataColumn(label: Text('姓名')),
          DataColumn(
            label: Text('年龄'),
            onSort: (i, asc) => setState(() {
              _data.sort((a, b) => asc 
                ? a['age'].compareTo(b['age'])
                : b['age'].compareTo(a['age']));
            }),
          ),
        ],
        rows: _data.map((item) => DataRow(
          selected: item['selected'],
          onSelectChanged: (v) => setState(() {
            item['selected'] = v!;
          }),
          cells: [
            DataCell(Text(item['name'])),
            DataCell(Text(item['age'].toString())),
          ],
        )).toList(),
      ),
    );
  }
}

注意事项

  • 默认无横向滚动,需嵌套 SingleChildScrollView
  • 大量数据时考虑 PaginatedDataTable
  • 可通过 DataCell 嵌套任意组件实现复杂交互

以上代码实现了带排序和选择功能的基础表格,可根据实际需求调整样式和交互逻辑。

回到顶部