首页 文章

表单字段输入的颤振firebase验证

提问于
浏览
2

我是Flutter和Firebase的新手,我正在尝试从表单验证用户输入并在firebase集合中运行它 .

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

我从Check if Field Already exists in 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,
        ),

但是,这会抛出一个错误,我必须为验证器提供静态类型的bool .

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

1 回答

  • 1

    未来给then()方法,你可以使用那个 . 您可以将验证方法修改为:

    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;
      }
    

相关问题