我有 2 個 statefull 類,第一個類包含 TextFormField 和按鈕來驗證 TextFormField。第二個類包含TextFormField。
點擊按鈕時如何驗證在第一堂課中呼叫的第二個 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),
);
}
}
uj5u.com熱心網友回復:
在 secondForm 類上添加這個,用函式小部件更新了驗證器
final Function(String)? validators; //initialization
validator: widget.validators as String? Function(String?)?,
在 FormValidation 類里面呼叫這個函式,像這樣
SecondForm(
validators: (String? value) {
if (value!.isEmpty)
return 'Required field';
}
)
uj5u.com熱心網友回復:
您可以通過將 TextEditingController 物件傳遞給第二個類并將該物件分配給第二個類的 TextFormField 來解決此問題,現在當您單擊第一個類中的提交按鈕時,您擁有 TextEditingController 物件,因此您可以檢查該物件資料并對其應用邏輯。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/447299.html
上一篇:dotnet 讀 WPF 源代碼筆記 為什么加上 BooleanBoxes 類
下一篇:kotlin中的密碼驗證
