Firebase 查询firestore以检查字段值是否存在并将流转换为未来?
我创建了一个函数,用于查询firestore并检查集合中是否存在名为“users”的phoneNo 我想得到一个布尔值,如果电话号码已经存在于文档字段中。 我该怎么做Firebase 查询firestore以检查字段值是否存在并将流转换为未来?,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,我创建了一个函数,用于查询firestore并检查集合中是否存在名为“users”的phoneNo 我想得到一个布尔值,如果电话号码已经存在于文档字段中。 我该怎么做 Future<bool> phoneRegisterCheck(phone) async{ bool phoneAlreadyRegistered; print('start'); var result = Firebase.instance.collection('users').where(
Future<bool> phoneRegisterCheck(phone) async{
bool phoneAlreadyRegistered;
print('start');
var result = Firebase.instance.collection('users').where('phoneNo', isEqualTo: phone);
}
未来电话注册检查(电话)异步{
bool电话已注册;
打印(“开始”);
var result=Firebase.instance.collection('users')。其中('phoneNo',isEqualTo:phone);
}
我想等待查询完成,然后返回结果。
当我使用listen方法时,它不会发生,因为函数返回null
Future<bool> phoneRegisterCheck(phone) async{
bool phoneRegistered;
print('start');
var result = DatabaseService().userCollection.where('phoneNo', isEqualTo: phone);
result.snapshots().listen((val){
val.documents.isEmpty ? phoneRegistered=false:phoneRegistered=true;
});
return phoneRegistered;
}
未来电话注册检查(电话)异步{
bool电话注册;
打印(“开始”);
var result=DatabaseService().userCollection.where('phoneNo',isEqualTo:phone);
result.snapshots().listen((val){
val.documents.isEmpty?phoneRegistered=false:phoneRegistered=true;
});
返回已注册的电话;
}
由于流
是异步的,因此在您的代码中,返回语句将在完全检索数据之前执行,因此您将得到null。你应该
使用wait for
代替listen
:
Future<bool> phoneRegisterCheck(phone) async{
bool phoneRegistered;
print('start');
var result = DatabaseService().userCollection.where('phoneNo', isEqualTo: phone).snapshots();
await for(var values in result){
values.documents.isEmpty ? phoneRegistered=false:phoneRegistered=true;
}
return phoneRegistered;
}
未来电话注册检查(电话)异步{
bool电话注册;
打印(“开始”);
var result=DatabaseService().userCollection.where('phoneNo',isEqualTo:phone.snapshots();
等待(结果中的var值){
values.documents.isEmpty?phoneRegistered=false:phoneRegistered=true;
}
返回已注册的电话;
}
从文档中:
流可以以多种方式创建,这是另一篇文章的主题,但它们都可以以相同的方式使用:异步for循环(通常称为wait for)迭代流的事件,就像for循环迭代Iterable一样
由于
流
是异步的,因此在代码中,将在完全检索数据之前执行return语句,因此您将得到null。你应该
使用wait for
代替listen
:
Future<bool> phoneRegisterCheck(phone) async{
bool phoneRegistered;
print('start');
var result = DatabaseService().userCollection.where('phoneNo', isEqualTo: phone).snapshots();
await for(var values in result){
values.documents.isEmpty ? phoneRegistered=false:phoneRegistered=true;
}
return phoneRegistered;
}
未来电话注册检查(电话)异步{
bool电话注册;
打印(“开始”);
var result=DatabaseService().userCollection.where('phoneNo',isEqualTo:phone.snapshots();
等待(结果中的var值){
values.documents.isEmpty?phoneRegistered=false:phoneRegistered=true;
}
返回已注册的电话;
}
从文档中:
流可以以多种方式创建,这是另一篇文章的主题,但它们都可以以相同的方式使用:异步for循环(通常称为wait for)迭代流的事件,就像for循环迭代Iterable一样