FLUTTER FIRESTORE-查询该字段并获取文档ID并检查其他字段

时间:2020-02-27 05:36:43

标签: flutter google-cloud-firestore document exists snapshot

我试图获取在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 个答案:

答案 0 :(得分:1)

您可能复制了代码的较旧版本,因为您的代码不太可能编译程序的以下行:

final DocumentSnapshot getuserdoc= await Firestore
    .instance
    .collection('users')
    .document(userdocid).get();

我的系统上的错误消息是:

不能将参数类型“ Iterable<String>”分配给参数类型“ String”。

这意味着userdocid是类型IterableString)的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是否在您的数据库中,否则请在下面注释以获取其他信息,因为提供的代码有编译错误,并且根本无法运行。