我有3个TextFormField
,用于在Flutter Form
(白天,晚上和移动电话)上输入电话号码。
对每个TextFormField
(在validator:
中)的验证允许输入空白字符串。
但是我不希望保存表单,除非至少输入了一个电话号码。
formKey.currentState.validate
显然会验证所有单个字段是否有效。
框架中是否有一种简单的方法可以交叉验证{strong> all TextFormFields
并显示错误,而不必为每个TextFormField
编写单独的验证器并包含对特定的字段名(我认为这有点脏)
String _validatePhoneNumber(String value) {
// dirty bit - means I have to write a separate validator for each TextFormField rather than use a generic validator
if (value.isEmpty && this.eveningNumber.isEmpty && this.mobileNumber.isEmpty)
return 'At least one number must be included';
if (value.isEmpty) return null;
if (_invalidNumber(value))
return 'Enter a valid phone number';
return null;
}
答案 0 :(得分:0)
您应该为每个TextEditingController
添加一个TextFormField
,这样您就可以在提交表单时检查每个字段的值。
例如:
class MyForm extends StatefulWidget {
@override
_MyFormState createState() => _MyFormState();
}
class _MyFormState extends State<MyForm> {
final _formKey = GlobalKey<FormState>();
TextEditingController first = TextEditingController();
TextEditingController second = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Form(
key: _formKey,
child: ListView(
children: <Widget> [
TextFormField(
controller: firstController
// rest of your stuff
)
// rest of your text fields using subsequent controllers
// secondController, thirdControler...
]
)
)
)
}
}
然后,每当您要检查其值时,只需致电firstController.text
;或者,如果想知道它是否为空,则只需致电firstController.text.isEmpty