Flutter - 参数类型“Object”不能分配给参数类型“Map<String, dynamic>”
Posted
技术标签:
【中文标题】Flutter - 参数类型“Object”不能分配给参数类型“Map<String, dynamic>”【英文标题】:Flutter - The argument type 'Object' can't be assigned to the parameter type 'Map<String, dynamic>' 【发布时间】:2021-08-03 15:14:08 【问题描述】:所以我一直在做这个项目,一切正常,直到我将包迁移到空安全并遇到这个错误。代码如下:
factory AdminDto.fromJson(Map<String, dynamic> json) => _$AdminDtoFromJson(json);
factory AdminDto.fromFirestore(DocumentSnapshot doc)
return AdminDto.fromJson(doc.data()!).copyWith(id: doc.id);
有人可以帮我解决这个问题吗?当涉及到 doc.data() 参数时,就会出现问题。我不能完全投入其中。
【问题讨论】:
【参考方案1】:您可能需要将doc.data()!
显式转换为Map<String, dynamic>
。像这样:
return AdminDto.fromJson(doc.data()! as Map<String, dynamic>).copyWith(id: doc.id);
或者正确定义DocumentSnapshot
的泛型,像这样:
factory AdminDto.fromFirestore(DocumentSnapshot<Map<String, dynamic>> doc)
return AdminDto.fromJson(doc.data()!).copyWith(id: doc.id);
【讨论】:
天哪!先生,您是救生员!我花了将近 5 个小时试图解决这个错误。我还有一个问题:将 doc.data() 包装到 doc.get(doc.data()!) 在这种情况下有帮助吗?因为我试过这个,它没有返回任何错误 我不是 firestore 方面的专家,但在我看来,get()
更像是 data
中字段的直接访问器,而 data()
返回整个数据集。您可能想要后者。
好的,非常感谢您,先生❤️以上是关于Flutter - 参数类型“Object”不能分配给参数类型“Map<String, dynamic>”的主要内容,如果未能解决你的问题,请参考以下文章
Flutter - 错误:参数类型'String/*1*/'不能分配给参数类型'String/*2*/'
Flutter:参数类型“String”不能分配给参数类型“Uri”[重复]