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

Flutter对象处理问题:Object?无法赋值给String类型参数dart报错如何解决?

问题原因

Dart 会自动推导categoriesData的类型为List<Map<String, Object?>>:因为你的Map里同时存在String和int类型的value,Dart会统一将value的类型推导为可空的Object。你直接从Map中取值时拿到的是Object?类型,无法直接赋值给Category构造函数要求的String、int类型参数,就会触发类型不匹配报错。

解决方法

下面提供3种常用解决方案,你可以根据实际场景选择:

  • 方案1:确定所有键对应的值类型、取值不会为空的情况下,直接强制类型转换
    修改映射逻辑的代码,对每个取值明确指定类型:
List<Category> categories = categoriesData
    .map((item) => Category(
        item['name'] as String, 
        item['course'] as int, 
        item['image'] as String
    ))
    .toList();
  • 方案2:增加空安全兼容处理,避免值缺失/类型不匹配时触发崩溃
    对每个取值做兜底处理:
List<Category> categories = categoriesData
    .map((item) => Category(
        item['name']?.toString() ?? '', 
        item['course'] as int? ?? 0, 
        item['image']?.toString() ?? ''
    ))
    .toList();
  • 方案3:提前声明Map的value类型为dynamic,避免Dart自动推导为Object
    修改categoriesData的定义,指定明确的类型:
List<Map<String, dynamic>> categoriesData = [
  {"name":"Lúa", 'course': 17, 'image' :"data\\images\\lua.png"},
  {"name":"Ngô", 'course': 25, 'image' :"data\\images\\ngo.png"},
  {"name":"Rau", 'course': 13, 'image' :"data\\images\\rau.png"},
  {"name":"Hoa", 'course': 17, 'image' :"data\\images\\hoa.png"},
];

注意:你的Category类中统计课程数的字段名为numOfCoure,请确认和你传入的course字段是否对应,拼写错误也会导致后续取值异常。

内容的提问来源于stack exchange,提问作者Ngoc Quy Nguyen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:15:04