firebase - 更新 Flutter Firebase 后收到 Bad State: field does not exist - QueryDocumentSnapshot
问题描述
在更新之前,如果 document['field'] 不存在,它将导致 null。现在它会抛出一个 Bad State 错误。需要 null 响应,因为该字段在 Firebase 集合中的某些历史数据和/或可选数据中不存在。在以下报告中也证实了这一点:
https://github.com/FirebaseExtended/flutterfire/issues/3826
有没有办法捕获错误并忽略它或将其设置为 null 或空字符串?
static Pool dataFromDocument(QueryDocumentSnapshot document) {
return Pool()
..authUID = document.get('authUID')
..documentID = document.id
..propertyManagerID = document['propertyManagerID'] as String
}
static Stream<QuerySnapshot> getData(String authUID) {
CollectionReference poolRef = FirebaseFirestore.instance.collection(dataDB);
Query query = poolRef.where('authUID', isEqualTo: authUID.trim());
return query.snapshots();
}
解决方案
具有空安全性,String
不可为空。然而,String?
是。
换行:
..propertyManagerID = document['propertyManagerID'] as String
至:
..propertyManagerID = document['propertyManagerID'] as String?
您Pool
还必须在类定义中将该属性propertyManagerID
作为 a 。String?
推荐阅读
- python - 从另一列中的每一行单元格中搜索字符串,如果找到匹配项,则在 pandas 中找到的匹配项下方插入行
- flutter - 如何让 SliverAppBar 在 sub_page 的 SliverList 之前滚动
- html - 如何在 Ionic 3 中水平对齐两个单选按钮
- javascript - 如何使用 express ntlm 实现用户名/密码验证?
- angular - 有没有办法从 angularJS 在 HDInsight 集群中运行配置单元查询?
- rabbitmq - RabbitMQ:当消费者关闭时发布消息,以后消费者不能在没有命名队列的情况下消费消息
- angular - Angular 服务构造函数阻塞单元测试
- cmake - CMAKE add_includes
- javascript - 从某个位置开始检查字符串是否与给定字符串匹配
- java - 将地图列表中的每个地图分开