我正在制作一个自定义TextFormField小部件,它将被多次使用。如何验证单个TextFormField而不验证同一列表/行/列中的任何其他TextFormField。
Widget timeTextField (TextEditingController controller){
return TextFormField(
controller: controller,
validator: (String userInput){
if(userInput.isEmpty){return 'Need to input time';}
},
onFieldSubmitted: (String userInput){
setState(() {
debugPrint(userInput);
controller.text = "amout";
debugPrint(controller.text);
});
},
);
}
它会验证用户何时按下键盘上的Submit,如果TextFormField为空,它将仅向用户按下Submit的那个TextFormField发送验证错误。
答案 0 :(得分:1)
TextField
中的验证是基于放置的Form
(而不是Column
或Row
或List
)进行的。要分别验证TextField的格式,请分配不同的键并分别调用_formKey.currentState.validate
。
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
final GlobalKey<FormState> _form1Key = GlobalKey();
final GlobalKey<FormState> _form2Key = GlobalKey();
final GlobalKey<FormState> _form3Key = GlobalKey();
return Scaffold(
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Form(
key: _form1Key,
child: TextFormField(
validator: (value) {
if (value.isEmpty) return "Cannot be empty";
},
),
),
Form(
key: _form2Key,
child: TextFormField(
validator: (value) {
if (value.isEmpty) return "Cannot be empty";
},
),
),
Form(
key: _form3Key,
child: TextFormField(
validator: (value) {
if (value.isEmpty) return "Cannot be empty";
},
),
),
],
),
floatingActionButton: FloatingActionButton(onPressed: () {
_form2Key.currentState.validate();
}),
);
}
}
答案 1 :(得分:0)
仅提供有关已关闭问题的信息:
您可以使用 autovalidateMode
。
目前有 3 种模式。我们曾经有过折旧的 autovalidate
。这仅适用于 FormFields 和 Forms 内部。
示例
TextFormField(
autocorrect: false,
autovalidateMode: AutovalidateMode.onUserInteraction,
cursorColor: Colors.black,
key: _usernameKey,
参考