FlutterFire DocumentSnapshot.data() 正在返回对象?

Posted

技术标签:

【中文标题】FlutterFire DocumentSnapshot.data() 正在返回对象?【英文标题】:FlutterFire DocumentSnapshot.data() is returning Object? 【发布时间】:2021-08-22 14:13:09 【问题描述】:

我正在升级我的 Flutter 应用程序中的库,并转向 null-safety。我使用的是 cloud_firestore 2.2.1 版。

在我的模型中,我有一个获取文档快照的工厂方法,我收到了错误

“对象?”类型的值不能分配给“Map”类型的变量。

factory Account.fromDoc(DocumentSnapshot doc) 

    if(doc.exists)
    
      Map<String, dynamic> data = doc.data();
      ...

    

https://firebase.flutter.dev/docs/firestore/usage/ 的文档指出

如果文档存在,你可以通过调用 data 方法,返回 Map,如果返回则返回 null 不存在

所以我不确定它为什么将它作为对象类型返回?当我期待 Map 或我需要做的事情时。我怎样才能让它工作?

【问题讨论】:

this 有帮助吗? 【参考方案1】:

基本上你必须向 DocumentSnapshot 添加一个类型,这发生在我身上,这就是我解决它的方法:

factory Account.fromDoc(DocumentSnapshot<Map<String, dynamic>> doc)  // here the type should be specified

    if(doc.exists)
    
      Map<String, dynamic> data = doc.data();
      ...

    

【讨论】:

感谢 Yazeed。我得到一个“'Map 类型的值?'不能分配给“Map”类型的变量。”因为我正在检查 doc.exists 是否存在,所以我希望它是非空值。但是,返回显示可能为 null - 您是否必须在 之后进行 null 检查?

以上是关于FlutterFire DocumentSnapshot.data() 正在返回对象?的主要内容,如果未能解决你的问题,请参考以下文章

FlutterFire 消息:您的后台消息处理程序中发生错误

Firestore / flutterFire / type 'List<dynamic>' 不是类型 'List<bool>' 的子类型

在新的 FlutterFire API 中使用 setData 和 merge: true

FlutterFire DocumentSnapshot.data() 正在返回对象?

Flutterfire Firestore中的字符串匹配查询

FlutterFire Firestore 2.0.0 与流式集合的迁移问题 [重复]