开发安卓数据库连接APP遇Dart类型错误:Map<dynamic,dynamic>无法赋值给Map<String,dynamic>
解决Dart中Map<dynamic, dynamic>无法赋值给Map<String, dynamic>的类型错误
错误原因
你的fromMap方法要求传入Map<String, dynamic>类型的参数,但循环中声明的变量mp被Dart自动推断为Map<dynamic, dynamic>——虽然方法参数query的类型是List<Map<String, dynamic>>,但你写for(Map mp in query)时没有指定mp的具体类型,导致类型不匹配,触发了这个错误。
解决方案
方案一:给循环变量指定明确类型
修改循环语句,给mp指定和query元素一致的类型Map<String, dynamic>:
static List<Product> fromMapList(List<Map<String , dynamic>> query) { List<Product> products = <Product>[]; for(Map<String, dynamic> mp in query) { products.add(fromMap(mp)); } return products; }
方案二:使用集合推导式简化代码
可以用Dart的集合推导式替代循环,自动保留正确的类型,代码更简洁:
static List<Product> fromMapList(List<Map<String , dynamic>> query) { return query.map((mp) => fromMap(mp)).toList(); }
额外说明
如果非要放宽类型限制,也可以修改fromMap方法的参数类型为Map<dynamic, dynamic>,但这会丢失Dart的类型安全校验,可能埋下后续的bug,不推荐这么做。
内容的提问来源于stack exchange,提问作者Dimuth De Zoysa
相关产品推荐
相关产品推荐

