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&lt;String, dynamic&gt;。像这样:

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”[重复]

Flutter - 参数类型“String”不能分配给参数类型“Uri”[重复]

参数类型“Future<bool>”不能分配给参数类型“Widget”[Flutter]