【问题标题】:Flutter - The argument type 'Object' can't be assigned to the parameter type 'Map<String, dynamic>'Flutter - 参数类型“Object”不能分配给参数类型“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() 参数时,就会出现问题。我不能完全投入其中。

【问题讨论】:

    标签: json firebase flutter google-cloud-firestore


    【解决方案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() 返回整个数据集。您可能想要后者。
    • 好的,非常感谢您,先生❤️
    猜你喜欢
    • 2021-07-28
    • 2021-03-23
    • 2021-11-07
    • 2021-08-29
    • 2021-10-02
    • 2023-04-05
    • 2020-12-27
    • 2020-12-15
    相关资源
    最近更新 更多