0

我有 1 个带有 2 个 TextFormField、firstName 和 lastName 的表单。我需要使用条件和正则表达式验证这两个数据,然后使用 Navigator 将数据传递到第二页。

问题是,我希望 lastName 是可选的或者可以为空。但我无法删除验证器,因为我仍然需要将它与正则表达式或其他人一起使用。

TextEditingController firstName = TextEditingController();
TextEditingController lastName = TextEditingController();

GlobalKey<FormState> _key = GlobalKey();
bool _validate = false;
String first, last;

Form(
  key: _key,
  autovalidate: _validate,
  child: Column(children: [
    InputName(
      controller: firstName,
      placeholder: 'Nama depan',
      validator: validateFirstName,
      onSaved: (String val) {
        first = val;
      },
    ),
    InputName(
      controller: lastName,
      placeholder: 'Nama belakang',
      validator: validateLastName,
      onSaved: (String val) {
        last = val;
      },
    ),
  ]),
),

Button(
  text: 'Lanjut mengisi Email',
  onPressed: () {
    if (_key.currentState.validate()) {
      _key.currentState.save();
      
      String a = firstName.text.capitalize();
      String b = lastName.text.capitalize();
      Navigator.push(
        context,
        PageRouteBuilder(
          pageBuilder: (context, animation1, animation2) =>
              Regist2Page([a, b]),
          transitionDuration: Duration(seconds: 0),
        ),
      );
    } else {
      setState(() {
        _validate = true;
      });
    }
  },
),

String validateLastName(String value) {
  if (value.isNotEmpty) {
    if (value.length > 20) {
      return 'Maksimal 20 karakter';
    }
    return null;
  }
  return null;
}
4

3 回答 3

0

由 Agus Setya R 解决。

String b = lastName.text == '' ? '' : lastName.text.capitalize();
于 2020-08-27T06:41:46.213 回答
0

尝试这个!

String validateLastName(String value,{bool isOptional = false})) {
  if(isOptional && (value==null || value.isEmpty)){
    return null;
  }
  if (value.isNotEmpty) {
    if (value.length > 20) {
      return 'Maksimal 20 karakter';
    }
    return null;
  }
  return null;
}
于 2020-08-27T05:58:27.547 回答
0

试试这个验证器

String validateLastName(String value) {
if (value == "") {
  // if value were null, is true and then return null
  return null;
}

if (value.length > 20) {
  return 'Maksimal 20 karakter';
}

return null;
}
于 2020-08-27T05:40:10.243 回答