颤振异步验证表单

Chr*_*ong 3 asynchronous dart firebase flutter google-cloud-firestore

new TextFormField(
                  validator: (value) async{
                    if (value.isEmpty) {
                      return 'Username is required.';
                    }
                    if (await checkUser()) {
                      return 'Username is already taken.';
                    }
                  },
                  controller: userNameController,
                  decoration: InputDecoration(hintText: 'Username'),
                ),
Run Code Online (Sandbox Code Playgroud)

我有一个供用户使用的表单,我想检查用户在Firestore的日期数据库中是否已经存在。

Future checkUser() async {
var user = await Firestore.instance
    .collection('users')
    .document(userNameController.text)
    .get();
return user.exists;
Run Code Online (Sandbox Code Playgroud)

}

这是我检查用户文档是否已存在于数据库中的功能。但是验证器给了我这个错误。

[dart]参数类型'(String)?无法将Future分配给参数类型'(String)吗?串'。

我应该如何解决这个问题?

Zro*_*roq 6

目前,我认为您无法将关联Futurevalidator

您可以做的就是通过单击按钮或以其他方式验证数据,并在验证程序响应变量上设置状态。

 @override
Widget build(BuildContext context) {
// TODO: implement build
return Scaffold(
    body: Form(
        key: _formKey,
        child: Column(children: [
          new TextFormField(
              validator: (value) {
                return usernameValidator;
              },
              decoration: InputDecoration(hintText: 'Username')),
          RaisedButton(
            onPressed: () async {
              var response = await checkUser();

              setState(() {
                this.usernameValidator = response;
              });

              if (_formKey.currentState.validate()) {}
            },
            child: Text('Submit'),
          )
        ])));
}
Run Code Online (Sandbox Code Playgroud)