Firebase 查询firestore以检查字段值是否存在并将流转换为未来?

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(

我创建了一个函数,用于查询firestore并检查集合中是否存在名为“users”的phoneNo

我想得到一个布尔值,如果电话号码已经存在于文档字段中。 我该怎么做

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一样