如何提取List<Map<String, Object>>类型rows的键值并传入TableRow构造函数
实现方案
1. 核心逻辑说明
你提供的TableRow写法存在拼写误差,标准Flutter场景下TableCell是作为TableRow的children参数传入的,以下是适配可空类型List<Map<String, Object>>?的完整实现。
2. 完整代码示例
import 'package:flutter/material.dart'; Widget buildTable(List<Map<String, Object>>? rows) { // 空安全校验,空数据返回占位组件 if (rows == null || rows.isEmpty) { return const SizedBox.shrink(); } List<TableRow> tableRows = []; // 【可选】生成表头行,不需要可以删除本段 List<String> columnKeys = rows.first.keys.toList(); tableRows.add( TableRow( // 若需要给TableRow设置唯一key,可参考:key: ValueKey('table_header') children: columnKeys.map((key) { return TableCell( child: Padding( padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 12), child: Text( key, style: const TextStyle(fontWeight: FontWeight.bold), ), ), ); }).toList(), ), ); // 生成数据行 for (var rowData in rows) { tableRows.add( TableRow( // 可自定义TableRow的key,用行内唯一值即可,示例用name当唯一标识 key: ValueKey(rowData['name']), children: rowData.values.map((value) { // 针对不同类型的值自定义展示格式 String showText; if (value is bool) { showText = value ? '是' : '否'; } else { showText = value.toString(); } return TableCell( child: Padding( padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 12), child: Text(showText), ), ); }).toList(), ), ); } // 封装为Table组件返回 return Table( border: TableBorder.all(color: Colors.grey), children: tableRows, ); }
3. 注意事项
- 可根据业务需求调整布尔值、日期等特殊类型的格式化规则
- 如果不需要表头,直接删除表头构造的代码段即可
- 每行的
key属性可根据实际业务唯一字段调整,无特殊需求也可以省略不写
内容的提问来源于stack exchange,提问作者Noufal
相关产品推荐
相关产品推荐

