FLUTTER FIRESTORE - 查询字段并获取文档 ID 并检查其他字段
Posted
技术标签:
【中文标题】FLUTTER FIRESTORE - 查询字段并获取文档 ID 并检查其他字段【英文标题】:FLUTTER FIRESTORE -Query the field and get document id and check other field 【发布时间】:2020-02-27 05:36:43 【问题描述】:我正在尝试获取 Firestore 中文档字段中的搜索值(用户 ID)我想检查文档的其他字段(状态)我尝试了这种方法但失败了
handlesubmit(BuildContext context)async
final QuerySnapshot searcheduserid=
await Firestore.instance.collection('users')
.where('userid',isEqualTo: userid).limit(1).getDocuments();
final userdocid=searcheduserid.documents.map((doc)=>doc.documentID);
final DocumentSnapshot getuserdoc= await Firestore.instance.collection('users')
.document(userdocid).get();
final userstatus = getuserdoc.data['status'];
// I GET AN ERROR HERE ERROR SAYS
// METHOD [](status) was called on null
if(userstatus==null)
return showdialog( context,'the entered user id status does not exist');
【问题讨论】:
【参考方案1】:您可能复制了旧版本的代码,因为您的代码不太可能编译程序的以下行:
final DocumentSnapshot getuserdoc= await Firestore
.instance
.collection('users')
.document(userdocid).get();
我系统上的错误信息是:
参数类型“
Iterable<String>
”不能分配给参数类型“String
”。
这意味着userdocid
是Iterable
类型的String
(Iterable<String>
),但需要一个String
类型的参数。
您有多种解决问题的方法,但我建议如下:
由于您只期待来自QuerySnapshot
的一个文档,因此只需查看第一个文档就足够了。
final QuerySnapshot searchedUserId = await Firestore.instance
.collection('users')
.where('userid', isEqualTo: userid)
.limit(1)
.getDocuments();
// if it is possible that searchedUserId returns no document make sure to
// check whether searchedUserId.documents.length > 0,
// otherwise searchedUserId.documents.first will throw an error
DocumentSnapshot document = searchedUserId.documents.first;
final userDocId = document.documentID;
final DocumentSnapshot getuserdoc =
await Firestore.instance.collection('users').document(userDocId).get();
改进的解决方案:
但是我认为无论如何您的代码有点多余,因为您正在查找与文档 ID 具有相同值的文档字段。您可以将整个代码缩短为
final DocumentSnapshot getuserdoc =
await Firestore.instance.collection('users').document(userid).get();
调用getuserdoc.data['status']
时出错
如果您收到类似于
的错误提示
[](status)
在 null 上被调用
那么这意味着getuserdoc
没有价值。这可能是因为没有具有给定 ID 的此类数据库条目。检查 ID 是否在您的数据库中,否则请在下方评论以获取更多信息,因为提供的代码存在编译错误并且根本无法运行。
【讨论】:
以上是关于FLUTTER FIRESTORE - 查询字段并获取文档 ID 并检查其他字段的主要内容,如果未能解决你的问题,请参考以下文章
FLUTTER,FIRESTORE:我有一个流构建器,它从集合中的所有文档中返回某个字段..如何添加查询?
如何使用flutter更新firestore中所有文档的单个字段?
Flutter 和 Firestore 基于位置的查询和数据结构