флаттер проверяет форму асинхронно - PullRequest
0 голосов
/ 24 июня 2018
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'.

Как мне исправить эту проблему?

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Вот пример, который выполняет асинхронную проверку формы: async form validation with modal progress indicator

Вы можете найти исходный код здесь: https://github.com/mmcc007/modal_progress_hud/tree/master/example

0 голосов
/ 24 июня 2018

В настоящее время я думаю, что вы не можете связать Future с validator.

. Что вы можете сделать, это проверить данные одним нажатием кнопки или другим способом и установитьсостояние в ответе валидатора var.

 @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'),
          )
        ])));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...