从另一个 class 验证 TextFormField
Validate TextFormField from another class
我有 2 个全状态 class,第一个 class 包含 TextFormField 和用于验证 TextFormField 的按钮。第二个 class 包含 TextFormField。
如何在点击按钮时验证第一个 class 调用的第二个 TextFormField?
class FormValidation extends StatefulWidget {
const FormValidation({Key key}) : super(key: key);
@override
_FormValidationState createState() => _FormValidationState();
}
class _FormValidationState extends State<FormValidation> {
final _formKey = GlobalKey<FormState>();
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: Form(
key: _formKey,
child: Column(
children: [
TextFormField(
validator: (value) =>
value.isEmpty ? 'Field 1 cannot be Empty' : null,
),
SecondForm(),
ElevatedButton(
onPressed: () {
if (_formKey.currentState.validate()) {
print('DataSubmitted');
}
},
child: Text('Submit'))
],
),
),
),
);
}
}
和第二种形式
class SecondForm extends StatefulWidget {
const SecondForm({Key key}) : super(key: key);
@override
_SecondFormState createState() => _SecondFormState();
}
class _SecondFormState extends State<SecondForm> {
final _formKey = GlobalKey<FormState>();
@override
Widget build(BuildContext context) {
return Form(
key: _formKey,
child: TextFormField(
validator: (value) =>
value.isEmpty ? 'Field 2 cannot be Empty' : null),
);
}
}
您可以通过将 TextEditingController 对象传递给第二个 class 并将该对象分配给第二个 class 的 TextFormField 来解决此问题,现在当您单击第一个 class,您拥有 TextEditingController 对象,因此您可以检查该对象数据并对其应用逻辑。
在 secondForm 上添加这个 class,用函数 widget 更新验证器
final Function(String)? validators; //initialization
validator: widget.validators as String? Function(String?)?,
在 FormValidation 中 class 调用这个函数,像这样
SecondForm(
validators: (String? value) {
if (value!.isEmpty)
return 'Required field';
}
)
我有 2 个全状态 class,第一个 class 包含 TextFormField 和用于验证 TextFormField 的按钮。第二个 class 包含 TextFormField。
如何在点击按钮时验证第一个 class 调用的第二个 TextFormField?
class FormValidation extends StatefulWidget {
const FormValidation({Key key}) : super(key: key);
@override
_FormValidationState createState() => _FormValidationState();
}
class _FormValidationState extends State<FormValidation> {
final _formKey = GlobalKey<FormState>();
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: Form(
key: _formKey,
child: Column(
children: [
TextFormField(
validator: (value) =>
value.isEmpty ? 'Field 1 cannot be Empty' : null,
),
SecondForm(),
ElevatedButton(
onPressed: () {
if (_formKey.currentState.validate()) {
print('DataSubmitted');
}
},
child: Text('Submit'))
],
),
),
),
);
}
}
和第二种形式
class SecondForm extends StatefulWidget {
const SecondForm({Key key}) : super(key: key);
@override
_SecondFormState createState() => _SecondFormState();
}
class _SecondFormState extends State<SecondForm> {
final _formKey = GlobalKey<FormState>();
@override
Widget build(BuildContext context) {
return Form(
key: _formKey,
child: TextFormField(
validator: (value) =>
value.isEmpty ? 'Field 2 cannot be Empty' : null),
);
}
}
您可以通过将 TextEditingController 对象传递给第二个 class 并将该对象分配给第二个 class 的 TextFormField 来解决此问题,现在当您单击第一个 class,您拥有 TextEditingController 对象,因此您可以检查该对象数据并对其应用逻辑。
在 secondForm 上添加这个 class,用函数 widget 更新验证器
final Function(String)? validators; //initialization
validator: widget.validators as String? Function(String?)?,
在 FormValidation 中 class 调用这个函数,像这样
SecondForm(
validators: (String? value) {
if (value!.isEmpty)
return 'Required field';
}
)