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

Flutter使用FutureBuilder渲染DataTable时List<dynamic>类型不匹配报错

错误原因

报错的核心原因是map操作默认返回的是List<dynamic>类型,而DataTable的rows参数要求必须传入List<DataRow>类型,Dart类型校验不匹配直接抛出异常。

修复方案

只需要显式声明map操作的返回类型,或者对最终列表做类型转换即可,常用两种修改方式:

方式1:给map方法指定泛型

将代码中构建rows的部分修改为:

rows: snapshot.data.map<DataRow>(
  (data) => DataRow(
    cells: [
      DataCell(
        Text(data.id.toString()),
      ),
      DataCell(
        Text(data.body),
      )
    ]),
).toList(),

方式2:对列表做强制类型转换

也可以在toList()后追加类型声明:

rows: snapshot.data.map(
  (data) => DataRow(
    cells: [
      DataCell(
        Text(data.id.toString()),
      ),
      DataCell(
        Text(data.body),
      )
    ]),
).toList() as List<DataRow>,

额外优化建议

可以给FutureBuilder加上泛型约束,避免后续再出现同类隐式类型转换问题,同时获得更准确的代码提示:
将原有代码

FutureBuilder(
  future: getPost(),
  builder: (BuildContext context, AsyncSnapshot snapshot){

修改为

FutureBuilder<List<Post>>(
  future: getPost(),
  builder: (BuildContext context, AsyncSnapshot<List<Post>> snapshot){

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:18:03