在Flutter中验证问题Textformfield

问题描述

我想创建一个注册表,但是出现如下错误。类型表单元素有效,但是当buildMail处于活动状态时,我使用buildName创建的小部件验证不起作用。

编辑:它最多可以验证7个Textformfield,但是当有7个以上Textformfield时,它不会检查更多内容,是否有Textformfield数量限制供验证?

ScreenShot

My Code


class RegisterForm extends StatefulWidget {
  @override
  _RegisterFormState createState() => _RegisterFormState();
}

class _RegisterFormState extends State<RegisterForm> {
  final _formkey = GlobalKey<FormState>();
  TextEditingController nameController = TextEditingController();
  TextEditingController surNameController = TextEditingController();
  TextEditingController userNameController = TextEditingController();
  TextEditingController passWordController = TextEditingController();
  TextEditingController passWordController2 = TextEditingController();
  TextEditingController phoneController = TextEditingController();
  TextEditingController phoneController2 = TextEditingController();
  TextEditingController phoneController3 = TextEditingController();
  TextEditingController cityCodeController = TextEditingController();
  TextEditingController epostaController = TextEditingController();
  int genderInt;
  bool hatirlaDeger = false;

  Widget buildName() {
    return TextFormField(
      controller: nameController,decoration: Inputdecoration(
        prefixIcon: Icon(Icons.short_text),labelText: "Ad",helperText: "",fillColor: Colors.red,border: OutlineInputBorder(
          borderRadius: BorderRadius.circular(10),borderSide: BorderSide(),),keyboardType: TextInputType.text,validator: (value) {
        if (value.isEmpty) {
          return "Bu alan boş bırakılamaz";
        } else if (value.length < 2) {
          return "Ad alanı en az 2 karakterli olmalıdır";
        } else if (value.length > 15) {
          return "Ad alanı en fazla 15 karakterli olabilir";
        }
      },);
  }

  Widget buildSurame() {
    return TextFormField(
      controller: surNameController,labelText: "Soyad",validator: (value) {
        if (value.isEmpty) {
          return "Bu alan boş bırakılamaz";
        } else if (value.length < 2) {
          return "Soyad alanı en az 2 karakterli olmalıdır";
        } else if (value.length > 15) {
          return "Soyad alanı en fazla 15 karakterli olabilir";
        }
      },);
  }

  // Widget buildMail() {
  //   return TextFormField(
  //     controller: epostaController,//     decoration: Inputdecoration(
  //       prefixIcon: Icon(Icons.mail),//       labelText: "E-Mail",//       helperText: "",//       fillColor: Colors.red,//       border: OutlineInputBorder(
  //         borderRadius: BorderRadius.circular(10),//         borderSide: BorderSide(),//       ),//     ),//     keyboardType: TextInputType.text,//     validator: (value) {
  //       if (value.length == 2) {
  //         return "test";
  //       }
  //     },//   );
  // }

  Widget buildUsername() {
    return TextFormField(
      controller: userNameController,labelText: "Kullanıcı Adı",validator: (value) {
        if (value.isEmpty) {
          return "Bu alan boş bırakılamaz";
        } else if (value.length < 4) {
          return "Kullanıc adı alanı en az 4 karakterli olmalıdır";
        } else if (value.length > 15) {
          return "Kullanıc adı alanı en fazla 15 karakterli olabilir";
        }
      },);
  }

  Widget buildPassWord() {
    return TextFormField(
      controller: passWordController,labelText: "Parola",obscureText: true,keyboardType: TextInputType.visiblePassword,validator: (value) {
        if (value.isEmpty) {
          return "Bu alan boş bırakılamaz";
        } else if (value.length < 6) {
          return "Parola alanı en az 6 karakterli olmalıdır";
        }
      },);
  }

  Widget buildConfirmPassWord() {
    return TextFormField(
      controller: passWordController2,labelText: "Parola Doğrulama",validator: (value) {
        if (passWordController2.text != passWordController.text) {
          return "Parolalar eşleşmiyor";
        }
      },);
  }

  Widget buildPhone() {
    return TextFormField(
      controller: phoneController,labelText: "Telefon",keyboardType: TextInputType.number,validator: (value) {
        if (value.length != 10) {
          return "Telefon alanı 10 karakterli olmalıdır";
        }
        if (value[0] == "0") {
          return "0 ile başlayamaz";
        }
      },);
  }

  Widget buildPhone2() {
    return TextFormField(
      controller: phoneController2,labelText: "Telefon2",validator: (value) {
        if (value.length != 30) {
          return "Telefon alanı 10 karakterli olmalıdır";
        }
      },);
  }

  Widget buildPhone3() {
    return TextFormField(
      controller: phoneController3,labelText: "Telefon3",);
  }

  Widget buildCityCode() {
    return TextFormField(
      controller: cityCodeController,labelText: "Plaka",validator: (value) {
        if (value.length != 2) {
          return "Plaka alanı 2 karakterli olmalıdır";
        }
        if (int.parse(value) < 1 || int.parse(value) > 81) {
          return "Plaka kodu geçerli değil";
        }
      },);
  }

  Widget genderPick() {
    return GenderPickerWithImage(
      maleText: "Erkek",femaleText: "Kadın",isCircular: true,showOtherGender: false,verticalAlignedText: false,equallyAligned: false,animationDuration: Duration(milliseconds: 300),opacityOfGradient: 0.4,padding: const EdgeInsets.all(5),size: MediaQuery.of(context).size.aspectRatio * 120,selectedGender: Gender.Female,selectedGenderTextStyle:
          TextStyle(color: Color(0xFF8b32a8),fontWeight: FontWeight.bold),unSelectedGenderTextStyle:
          TextStyle(color: Colors.white,fontWeight: FontWeight.normal),onChanged: (Gender gender) {
        if (gender == Gender.Female) {
          genderInt = 0;
        } else {
          genderInt = 1;
        }
      },);
  }

  Widget datePick() {
    return Container(
      height: 100,child: CupertinoDatePicker(
        minimumYear: 1900,maximumYear: DateTime.Now().year - 12,mode: CupertinoDatePickerMode.date,initialDateTime: DateTime(DateTime.Now().year - 12),onDateTimeChanged: (DateTime newDateTime) {},);
  }

  Widget accept() {
    return Row(
      children: [
        CheckBox(
          activeColor: Colors.orange,value: hatirlaDeger,checkColor: Colors.white,onChanged: (checkDeger) {
            setState(() {
              hatirlaDeger = checkDeger;
            });
          },GestureDetector(
          child: Text(
            "Kullanım Koşullarını Kabul Ediyorum",style:
                TextStyle(fontSize: MediaQuery.of(context).size.width * 0.031),],);
  }

  Widget regButton() {
    return Row(
      children: <Widget>[
        Expanded(
          child: RaisedButton(
            child: Text(
              "Kayıt Ol",style: TextStyle(color: Colors.white),color: Colors.Amber,shape: RoundedRectangleBorder(
                borderRadius: BorderRadius.circular(10.0),side: BorderSide(color: Colors.transparent)),onpressed: () {
              if (_formkey.currentState.validate()) {
                print("Doğru");
              } else {
                print("Yanlış");
              }
            },);
  }

  Widget cancelButton() {
    return Row(
      children: <Widget>[
        Expanded(
          child: RaisedButton(
            color: Colors.blue,child: Text(
              "Vazgeç",onpressed: () {
              Navigator.popAndPushNamed(context,"/");
            },);
  }

  @override
  Widget build(BuildContext context) {
    return Form(
      // autovalidate: true,key: _formkey,child: ListView(
        children: [
          buildName(),buildSurame(),buildUsername(),buildPassWord(),buildConfirmPassWord(),buildPhone(),buildPhone2(),buildPhone3(),buildCityCode(),genderPick(),Divider(),datePick(),accept(),regButton(),cancelButton(),);
  }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)