You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中如何将sqflite数据库数据以表格形式展示

数据库数据的表格/列表视图实现方案

方案1:ListView列表展示

先在页面的State类中维护数据列表,修改查询方法将数据同步到列表并更新UI:

List<Map<String, dynamic>> _dataList = [];

void _query() async {
  final allRows = await dbHelper.queryAllRows();
  setState(() {
    _dataList = allRows;
  });
}

然后在build方法中渲染列表项:

@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(title: const Text('数据列表')),
    body: _dataList.isEmpty
        ? const Center(child: Text('暂无数据'))
        : ListView.builder(
            itemCount: _dataList.length,
            itemBuilder: (context, index) {
              final row = _dataList[index];
              return ListTile(
                leading: Text(row[columnId].toString()),
                title: Text(row[columnName]),
                subtitle: Text('批次:${row[columnBatch]}'),
              );
            },
          ),
    floatingActionButton: FloatingActionButton(
      onPressed: _query,
      child: const Icon(Icons.refresh),
    ),
  );
}

方案2:DataTable表格展示

同样先维护数据列表,再用DataTable实现表格布局(支持横向滚动适配小屏):

@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(title: const Text('数据表格')),
    body: _dataList.isEmpty
        ? const Center(child: Text('暂无数据'))
        : SingleChildScrollView(
            scrollDirection: Axis.horizontal,
            child: DataTable(
              columns: const [
                DataColumn(label: Text('ID')),
                DataColumn(label: Text('名称')),
                DataColumn(label: Text('批次')),
              ],
              rows: _dataList.map((row) {
                return DataRow(cells: [
                  DataCell(Text(row[columnId].toString())),
                  DataCell(Text(row[columnName])),
                  DataCell(Text(row[columnBatch])),
                ]);
              }).toList(),
            ),
          ),
    floatingActionButton: FloatingActionButton(
      onPressed: _query,
      child: const Icon(Icons.refresh),
    ),
  );
}

补充优化

  • 可在页面初始化时自动加载数据,重写initState:
@override
void initState() {
  super.initState();
  _query();
}
  • 确保columnId、columnName、columnBatch常量与你的数据库表定义完全一致

内容的提问来源于stack exchange,提问作者Jerome George

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 09:07:40