Только проверка поля первой формы сохраняется в flutter

#forms #validation #flutter

#формы #проверка #flutter

Вопрос:

Есть 2 проблемы, с которыми я сталкиваюсь.

  1. Форма запоминает значение только для первого поля (здесь поле имени) при submit первом щелчке.

  2. только full name поле получает границу ошибки проверки при submit первом нажатии.

Примечание: 1) После этого первого раза все работает нормально. 2) Валидатор работает для всех, поскольку мы можем видеть, что изображение четко показывает ошибки для всех полей в форме flutter.

введите описание изображения здесь

введите описание изображения здесь

Рассматриваемый код выглядит следующим образом:

 
void _handleRegistration() async {
    FormState formState = _formKey.currentState;
    formState.save();
    if (formState.validate()) {
      // No error in validation
      setState(() {
        _isLoading = true;
      });
...
}
  

Обновление: добавление TextFormField кода:

 TextFormField buildCPassFormField() {
    return TextFormField(
      onSaved: (newValue) => cpass = newValue,
      onChanged: (value) {
        if (value.isNotEmpty ||
            value.length >= 6 ||
            pass == cpass amp;amp; errors["cpass"] != null) {
          setState(() {
            errors["cpass"] = "";
          });
          return "";
        }
        return null;
      },
      validator: (value) {
        if (value.isEmpty || value == null) {
          setState(() {
            errors["cpass"] = kCPassNullError;
          });
          return "";
        } else if (value.length < 6) {
          setState(() {
            errors["cpass"] = kShortPassError;
          });
          return "";
        } else if (value != pass) {
          setState(() {
            errors["cpass"] = kMatchPassError;
          });
          return "";
        }
        setState(() {
          cpass = value;
        });
        return null;
      },
      obscureText: true,
      keyboardType: TextInputType.text,
      autofillHints: [AutofillHints.password],
      decoration: InputDecoration(
        floatingLabelBehavior: FloatingLabelBehavior.always,
        suffixIcon:
            CustomSurffixIcon(svgIcon: "assets/icons/md-lock-closed.svg"),
        labelText: 'Confirm Password',
      ),
    );
  }

  TextFormField buildPassFormField() {
    return TextFormField(
      onSaved: (newValue) => pass = newValue,
      onChanged: (value) {
        if (value.isNotEmpty || value.length > 6 amp;amp; errors["pass"] != null) {
          setState(() {
            errors["pass"] = "";
          });
          return "";
        }
        return null;
      },
      validator: (value) {
        if (value.isEmpty || value == null) {
          setState(() {
            errors["pass"] = kPassNullError;
          });
          return "";
        } else if (value.length < 6) {
          setState(() {
            errors["pass"] = kShortPassError;
          });
          return "";
        }
        setState(() {
          pass = value;
        });
        return null;
      },
      obscureText: true,
      keyboardType: TextInputType.text,
      autofillHints: [AutofillHints.password],
      decoration: InputDecoration(
        floatingLabelBehavior: FloatingLabelBehavior.always,
        suffixIcon:
            CustomSurffixIcon(svgIcon: "assets/icons/md-lock-closed.svg"),
        labelText: 'Password',
      ),
    );
  }

  TextFormField buildEmailFormField() {
    return TextFormField(
      onSaved: (newValue) => email = newValue,
      onChanged: (value) {
        if (value.isNotEmpty ||
            value != null amp;amp; !emailValidatorRegExp.hasMatch(value)) {
          setState(() {
            errors["email"] = "";
          });
          return "";
        }
        setState(() {
          email = value;
        });
        return null;
      },
      validator: (value) {
        if (value.isEmpty || value == null) {
          setState(() {
            errors["email"] = kEmailNullError;
          });
          return "";
        } else if (!emailValidatorRegExp.hasMatch(value)) {
          setState(() {
            errors["email"] = kInvalidEmailError;
          });
          return "";
        }
        return null;
      },
      autofocus: true,
      autofillHints: [AutofillHints.email],
      keyboardType: TextInputType.emailAddress,
      decoration: InputDecoration(
        floatingLabelBehavior: FloatingLabelBehavior.always,
        suffixIcon: CustomSurffixIcon(svgIcon: "assets/icons/md-mail.svg"),
        labelText: 'Email ID',
      ),
    );
  }

  TextFormField buildNameFormField() {
    return TextFormField(
      onSaved: (newValue) => name = newValue,
      onChanged: (value) {
        if (value.isNotEmpty || nameValidatorRegExp.hasMatch(value)) {
          setState(() {
            errors["name"] = "";
          });
        }
        setState(() {
          name = value;
        });
        return null;
      },
      validator: (value) {
        if (value.isEmpty || value == null) {
          setState(() {
            errors["name"] = kNameNullError;
          });
          return "";
        } else if (!nameValidatorRegExp.hasMatch(value)) {
          setState(() {
            errors["name"] = kInvalidNameError;
          });
          return "";
        }
        return null;
      },
      autofocus: true,
      autofillHints: [AutofillHints.name],
      keyboardType: TextInputType.text,
      decoration: InputDecoration(
        floatingLabelBehavior: FloatingLabelBehavior.always,
        suffixIcon: CustomSurffixIcon(svgIcon: "assets/icons/md-user.svg"),
        labelText: 'Your Full Name',
      ),
    );
  }

  

Комментарии:

1. поделитесь кодом вместе, чтобы люди могли лучше вам помочь.

2. @theCaptainXgod вы хотите, чтобы я добавил TextFormField код?