TextFormField Validator не показывает сообщение валидатора - PullRequest
0 голосов
/ 02 мая 2018

Я попытался создать эту форму с проверкой, чтобы она отображала ошибки, когда пользователь возвращает каждое поле. Но по какой-то причине это не работает. У меня нет причин, почему. Я просто застрял сейчас.

Вот код:

import 'package:flutter/material.dart';
import 'package:validate/validate.dart';

void main() => runApp(new MaterialApp(
  title: 'Forms in Flutter',
  home: new LoginForm(),
  theme: ThemeData.dark(),
));

class LoginForm extends StatefulWidget {
  String email;
  String password;
  final Function saveEmail;
  final Function savePassword;
  final Function attemptLogin;

  LoginForm({this.email, this.password, this.saveEmail, this.savePassword,
    this.attemptLogin});

  @override
  LoginFormState createState(){
    return new LoginFormState();
  }
}

class LoginFormState extends State<LoginForm> {
  final loginFormKey = GlobalKey<FormState>();
  final emailController = new TextEditingController();
  final passController = new TextEditingController();

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
        appBar: new AppBar(
          title: new Text('Login'),
        ),
        body: new Container(
          padding: new EdgeInsets.all(10.0),
          child: new Form(
            key: loginFormKey,
            child: new Column(
              children: <Widget>[
                new Row(
                  children: <Widget>[
                    new Container(
                      width: 2.0,
                      height: 18.0,
                      color: Colors.white,
                    ),
                    new Container(
                        width: 5.0,
                        height: 0.0
                    ),
                    new Expanded(child: new TextFormField(
                      decoration: new InputDecoration.collapsed(
                        hintText: "EMAIL",
                      ),

                      validator: (String value) {
                        if (!Validate.isEmail(value)) {
                          return 'Please enter Email';
                        }
                      },
                      onFieldSubmitted: (val) {
                        print(loginFormKey.currentState.validate());
                        if (loginFormKey.currentState.validate()) {
                          widget.email = val;
                          widget.saveEmail(val);
                        }
                      },
                      controller: emailController,

                    ),)
                  ],

                ),

                new Row(
                  children: <Widget>[
                    new Container(
                      width: 2.0,
                      height: 18.0,
                      color: Colors.white,
                      padding: const EdgeInsets.fromLTRB(0.0, 0.0, 5.0, 0.0),
                    ),
                    new Container(
                        width: 5.0,
                        height: 0.0
                    ),
                    new Expanded(child: new TextFormField(
                      obscureText: true,
                      decoration: new InputDecoration.collapsed(
                          hintText: 'PASSWORD',
                      ),
                      validator: (val) =>
                      val.length < 6 ?
                      'Still too short' : '',
                      onFieldSubmitted: (val) {
                        if (loginFormKey.currentState.validate()) {
                          widget.email = emailController.text;
                          print(widget.email);
                          widget.saveEmail(emailController.text);
                          widget.password = val;
                          print(widget.password);
                          widget.savePassword(val);
                          widget.attemptLogin();
                        }
                      },
                      controller: passController,
                    ),)
                  ],
                )
              ],
            ),
          ),
        )
    );
  }
}

Я действительно не знаю, что вызвало это. Кажется, что все в onfieldSubmitted часть полей не работает. Если я удаляю операторы If, они работают нормально, но после добавления они не дают ответа.

Кажется, что-то простое, но я просто упускаю суть. Любая помощь будет принята с благодарностью. Благодарю.

Ответы [ 2 ]

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

У меня сейчас та же проблема. Я думаю, что !Validate.isEmail(value) не работает. Я закомментировал это, и мой код работал хорошо. Попробуйте написать свою собственную проверку электронной почты вместо использования !Validate.isEmail(value)

0 голосов
/ 03 мая 2018

Свойство onFieldSubmitted работает при нажатии клавиши ввода или отправки на клавиатуре. Я думаю, вы должны добавить кнопку отправки для отправки, потому что ваши валидации работают для формы, а не для поля или ввода. Таким образом, это означает, что если пользователь ввел адрес электронной почты, но этот пользователь не вводил пароль, он получит сообщение об ошибке проверки пароля в поле электронной почты при нажатии кнопки ввода. Это не очень хорошая обратная связь. Если вы используете кнопку отправки, она должна показывать больше хороших отзывов для проверочных сообщений.

// The button widget
new FlatButton(
  onPressed: () => this._submit(),
  child: new Text('Login')
);

// The submit function
void _submit() {
  if (this.loginFormKey.currentState.validate()) {
    this.loginFormKey.currentState.save();
    // Do your jobs with the validated form data.
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...