flutter 异步验证表单

2023-11-23

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'),
                ),

我有一个用户表单,我想检查该用户是否已存在于 firestore 数据库中。

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

}

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

[dart] 参数类型“(String) → Future”不能分配给参数类型“(String) → String”。

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


此时我认为你不能关联一个Future to a validator.

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

 @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'),
          )
        ])));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

flutter 异步验证表单 的相关文章

随机推荐