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

Flutter手动JSON序列化报错:类型'({bool growable}) => List<Office>'无法转为List<Office>

错误分析与解决方案

这个错误的核心是你把一个返回List<Office>的构造函数/工厂方法当成了**List<Office>实例**来赋值或类型转换,这是Dart版本更新后语法规范变严格导致的(旧版本Dart可能允许一些不严谨的写法)。

常见错误场景与修正方法

  1. 直接引用List类型而非调用构造器
    旧课程可能写了类似这样的代码:

    List<Office> offices = List<Office> as List<Office>;
    // 或者
    List<Office> offices = List<Office>;
    

    这里的List<Office>是类型本身,不是实例。修正为:

    // 推荐:创建空的可增长列表
    List<Office> offices = [];
    // 或者显式调用构造器
    List<Office> offices = List<Office>.empty(growable: true);
    
  2. 类型转换时目标是函数而非实例
    如果你的代码里有类似someValue as List<Office>的转换,而someValue实际上是一个带参数的List构造函数(比如({bool growable}) => List<Office>),需要先调用这个函数生成实例再转换:
    错误代码:

    var offices = getOfficeList() as List<Office>;
    

    修正:

    // 先调用函数传入参数得到实例,再做类型转换(如果需要)
    var offices = getOfficeList(growable: true) as List<Office>;
    
  3. 使用过时的List构造写法
    旧版本Dart中List(length)这种写法现在已被标记为过时,替换为:

    // 创建固定长度的空列表
    List<Office> offices = List<Office>.filled(5, Office());
    // 或者生成带初始值的列表
    List<Office> offices = List.generate(5, (index) => Office(id: index));
    

额外建议

  • 检查所有涉及List<Office>赋值、转换的代码位置,确保你操作的是列表实例,而不是列表的构造函数/类型本身。
  • 如果是从JSON或其他数据源解析列表,确保解析逻辑返回的是List<Office>实例,而非创建列表的函数。

内容的提问来源于stack exchange,提问作者Ihor K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 16:25:36