Flutter firebase 验证表单字段输入

PJQ*_*Jag 5 dart firebase flutter

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

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

我从Check if Field Already Existing 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;
  }
Run Code Online (Sandbox Code Playgroud)

我希望能够在文本表单字段的验证器中调用此方法,如下所示。

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

但是,这会引发一个错误,即我必须为验证器提供静态 bool 类型。

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

anm*_*ail 4

未来给出 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;
  }
Run Code Online (Sandbox Code Playgroud)