有没有一种简单的方法可以交叉验证Flutter Form TextFormFields?

时间:2019-07-18 13:25:00

标签: flutter dart flutter-layout

我有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;

}

1 个答案:

答案 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