我正在制作一个自定义的 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);
});
},
);
}
Run Code Online (Sandbox Code Playgroud)
它在用户按下键盘上的提交时进行验证,如果 TextFormField 为空,它仅向用户按下提交的那个 TextFormField 发送验证错误。
Ano*_*P.A 11
仅提供有关已结束问题的信息:
您可以使用autovalidateMode。
目前有 3 种模式。我们以前有autovalidate折旧的。这仅适用于 FormFields 和 Forms 内部。
例子
TextFormField(
autocorrect: false,
autovalidateMode: AutovalidateMode.onUserInteraction,
cursorColor: Colors.black,
key: _usernameKey,
Run Code Online (Sandbox Code Playgroud)
参考
TextFields 中的验证基于Form它们被放置在(而不是ColumnorRow或List)中。要分别验证 TextFields 将它们放在不同的表单中,分配不同的键并分别调用_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();
}),
);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2970 次 |
| 最近记录: |