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

Flutter动态生成列表并在UI展示时遭遇类型错误:Expected a value of type 'List', but got one of type '({bool growable}) => List',求排查指导

问题排查与解决方案

嘿,我帮你找到了问题所在,这个错误其实是个很容易犯的小疏忽!

核心错误原因

你遇到的 Expected a value of type 'List', but got one of type '({bool growable}) => List' 错误,根源在于你调用toList的时候忘记加括号了!

toList() 是一个方法,需要通过括号来执行它并返回实际的List实例;而你写的.toList只是引用了这个方法本身,并没有执行,这就导致赋值给items的是方法对象而非List对象,直接触发了类型不匹配的报错。

修正后的代码

1. 数据解析部分的修正

首先把解析列表的代码改对,同时优化重复解析的冗余操作:

if (response.statusCode == 200) {
  // 关键修正:给toList加上括号,执行方法获取List实例
  List items = jsonDecode(response.body)['result'].toList();
  // 用map简化循环,替代原有的for循环(更简洁)
  List<Contract> contractResults = items.map((item) => Contract.fromJson(item)).toList();
  // 记得返回这个结果,让FutureBuilder能拿到数据
  return contractResults;
} else {
  // 处理请求失败的情况,抛出异常供FutureBuilder捕获
  throw Exception('Failed to load contracts');
}

原代码里每次循环都重复调用jsonDecode(response.body)['result'][i]完全没必要,直接用已经解析好的items[i]就行,用map方法还能进一步简化代码。

2. FutureBuilder部分的修正

你的列表展示代码还有几个小问题:比如用snapshot.data != ""判断空列表(List和字符串没法直接比较),缺少加载中、错误状态的处理,可能导致UI返回null报错。修正后:

child: FutureBuilder<List<Contract>>(
  future: futureAlbum,
  builder: (context, snapshot) {
    // 处理加载中状态,展示加载指示器
    if (snapshot.connectionState == ConnectionState.waiting) {
      return const Center(child: CircularProgressIndicator());
    }
    // 处理请求错误,展示错误信息
    if (snapshot.hasError) {
      return Center(child: Text('加载失败: ${snapshot.error}'));
    }
    // 处理数据存在且非空的情况
    if (snapshot.hasData && snapshot.data!.isNotEmpty) {
      return ListView.builder(
        itemCount: snapshot.data!.length,
        itemBuilder: (BuildContext context, int index) {
          return Text(snapshot.data![index].contractId);
        },
      );
    }
    // 兜底:没有数据时的提示
    return const Center(child: Text('暂无合同数据'));
  },
)

额外提示

  • 如果你用的是空安全版本的Flutter,记得在访问snapshot.data时做好空判断(上面的代码已经通过hasData和!处理了)
  • 用map方法转换列表是Dart中更简洁的写法,能替代繁琐的for循环,推荐使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 14:08:10