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

Flutter:读取List<Map<String,dynamic>>模型数据并解决DataTable类型错误

问题解答

一、获取所有用户sessions中的"status"值

有两种简洁的方式可以提取所有用户会话中的status值:

方式1:嵌套遍历

List<String> allStatuses = [];
userData.forEach((user) {
  user.sessions.forEach((session) {
    allStatuses.add(session['status'] as String);
  });
});

方式2:链式集合操作

利用expand展开所有用户的sessions列表,再通过map提取status:

List<String> allStatuses = userData
    .expand((user) => user.sessions)
    .map((session) => session['status'] as String)
    .toList();

二、修复DataTable的_createRows类型错误

出现参数类型'List<dynamic>'无法分配给参数类型'List<DataRow>'的核心原因是:你的_createRows方法没有明确指定返回List<DataRow>类型,或者内部生成的元素不是合规的DataRow实例。

修复后的代码示例

假设你的DetailPage接收一个UserModel对象作为数据源,修复后的_createRows方法如下:

// 页面接收的用户数据
final UserModel user;

// 明确返回List<DataRow>类型
List<DataRow> _createRows() {
  return user.sessions.map((session) {
    return DataRow(
      cells: [
        DataCell(Text(session['date'] as String)),
        DataCell(Text(session['status'] as String)),
        DataCell(Text(session['durations'].toString())),
      ],
    );
  }).toList();
}

在DataTable中使用该方法

DataTable(
  columns: const [
    DataColumn(label: Text('日期')),
    DataColumn(label: Text('状态')),
    DataColumn(label: Text('时长')),
  ],
  rows: _createRows(), // 此时类型匹配,不会报错
)

关键注意事项

  • 必须显式声明方法返回List<DataRow>,不能依赖Dart的类型推断(避免返回List<dynamic>)
  • 每个DataRow的cells参数必须是List<DataCell>类型,确保每个单元格都是DataCell实例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 04:18:17