一尘不染

表单字段输入的Flutter Firebase验证

flutter

我是Flutter和Firebase的新手,我正在尝试验证来自表单的用户输入并针对Firebase集合运行它。

我要求用户创建一个用户名,并希望验证Firebase目录中没有现有的用户名。

我从Flutter
Firestore中的“检查字段是否已存在”的讨论中获得了这种验证方法。我想为该方法提供一个名称,使用该名称构建一个文档列表,然后确认不存在任何文档。

  Future<bool> doesNameAlreadyExist(String name) async {
    final QuerySnapshot result = await Firestore.instance
        .collection('user')
        .where('user_id', isEqualTo: name)
        .limit(1)
        .getDocuments();
    final List<DocumentSnapshot> documents = result.documents;
    return documents.length == 1;
  }

我希望能够像下面所做的那样在文本表单字段的验证器中调用此方法。

new TextFormField(
          decoration: new InputDecoration(labelText: 'Username'),
          validator: (value) => doesNameAlreadyExist(value) ? "Username already taken" : null,
          onSaved: (value) => _username = value,
        ),

但是,这引发了一个错误,我必须为验证器使用静态类型的布尔值。

我的问题:我如何(1)创建能够搜索Firebase的静态布尔方法,或者(2)如何通过异步调用获得相同的功能(理想情况下,无需构建另一个小部件)?


阅读 324

收藏
2020-08-13

共1个答案

一尘不染

将来使用then()方法,您可以使用That。您可以将验证器方法修改为:

validator: (value) => checkUserValue(value) ? "Username already taken" : null,


  bool _userExist = false;
  checkUserValue<bool>(String user) {
    _doesEmailAlreadyExist(user).then((val){
      if(val){
        print ("UserName Already Exits");
        _userExist = val;
      }
      else{
        print ("UserName is Available");
        _userExist = val;
      }
    });
    return _userExist;
  }
2020-08-13