Как я могу поставить (истинный значок), когда я пишу письмо и проверяю его с помощью флаттера - PullRequest
0 голосов
/ 21 февраля 2020

Как я могу поставить значок при наборе электронного письма, чтобы подтвердить от регулярного выражения электронной почты и прочность пароля?

TextFormField(
                    controller: _emailController,
                    textAlign: TextAlign.end,
                    decoration: InputDecoration(
                        hintStyle: TextStyle(fontSize: 16),
                        hintText: "example@gmail.com",
                        fillColor: Colors.grey[200],
                        filled: true,
                        border: OutlineInputBorder(
                            borderSide: BorderSide(
                              width: 0,
                              style: BorderStyle.none,
                            ),
                            borderRadius: BorderRadius.circular(14))),
                    onSaved: (String value) {
                      email = value;
                    },
                    validator: _validateEmail,
                    keyboardType: TextInputType.emailAddress,
                  ),
                    Padding(
                    padding: const EdgeInsets.fromLTRB(0, 0, 20, 0),
                    child: Text(
                      "كلمة المرور",
                      textAlign: TextAlign.right,
                      style: TextStyle(
                          fontWeight: FontWeight.bold, fontSize: 16),
                    ),
                  ),
                  new TextFormField(
                    controller: _passwordController,
                    textAlign: TextAlign.end,
                    keyboardType: TextInputType.visiblePassword,
                    decoration: InputDecoration(
                        prefixIcon: new GestureDetector(
                            onTap: () {
                              setState(() {
                                _obscureText = !_obscureText;
                              });
                            },
                            child: Padding(
                              padding:
                                  const EdgeInsets.fromLTRB(20, 10, 0, 0),
                              child: Icon(
                                  _obscureText
                                      ? Icons.visibility
                                      : Icons.visibility_off,
                                  color: visi),
                            )),
                        hintStyle: TextStyle(fontSize: 16),
                        hintText: "",
                        fillColor: Colors.grey[200],
                        filled: true,
                        border: OutlineInputBorder(
                            borderSide: BorderSide(
                              width: 0,
                              style: BorderStyle.none,
                            ),
                            borderRadius: BorderRadius.circular(14))),
                    onSaved: (String value) {
                      password = value;
                    },
                    validator: _validatePassword,
                    obscureText: !_obscureText,
                  ),

1 Ответ

0 голосов
/ 21 февраля 2020

Для электронной почты вы можете добавить слушателя к вашему _emailController, например:

var _myIcon = Icon.cancel;

 void initState() {
  super.initState();

 // Start listening to changes.
  _emailController.addListener(_checkEmail);
}

А затем:

_checkEmail() {

   bool emailValid = RegExp(r"^[a-zA-Z0-9.a-zA-Z0-9.!#$%&'*+-/=?^_`{|}~]+@[a-zA-Z0-9]+\.[a-zA-Z]+").hasMatch(_emailController.text);

   if(emailValid)
       setState(() {
           _myIcon=Icons.ok;
        });
}

Теперь добавьте prefixIcon в поле своей электронной почты с помощью _myIcon значение.

Для пароля с:

  • Минимум 1 Верхний регистр
  • Минимум 1 строчный
  • Минимум 1 Нумери c Число
  • Минимум 1 специальный символ
  • Общий разрешенный символ (! @ # $ & * ~)

и на основе этот ответит вам можно использовать регулярное выражение, как это:

 RegExp(r'^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[!@#\$&*~]).{8,}$').hasMatch(_passwordController.text);
...