我试图获取在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');
}
}
答案 0 :(得分: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)
被调用为空
这意味着getuserdoc
没有任何价值。这可能是由于不存在具有给定ID的此类数据库条目。检查ID是否在您的数据库中,否则请在下面注释以获取其他信息,因为提供的代码有编译错误,并且根本无法运行。