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
相关产品推荐
相关产品推荐

