flutter - 如何使用 onFieldSubmitted 单独验证 TextFormField
问题描述
我正在制作一个将多次使用的自定义 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);
});
},
);
}
当用户在键盘上按下提交时,它会验证,如果 TextFormField 为空,它只会向用户按下提交的那个 TextFormField 发送验证错误。
解决方案
s中的验证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();
}),
);
}
}
推荐阅读
- swiftui - SwiftUI TabView 索引视图不尊重页面视图索引
- mongodb - 使用来自 mongodb 触发器的 cloudwatch 事件触发 aws lambda 函数比使用 sqs 中的消息有多可靠?
- postgresql - 错误:Docker-compose Postgres 中“CREATE”或附近的语法错误
- firebase - Flutter Web Firebase 错误。未捕获的 ReferenceError:未定义 firebase
- php - 如何在共享主机上安装 ffmpeg?
- node.js - 如何在 nodejs 中缓存和执行调用
- python - Python Django 初学者:无法打开 manage.py
- pandas - 准备数据集时间序列数据
- recode - 通过平均替换按比例分配子量表原始分数
- snowflake-cloud-data-platform - 不安全的雪花控制台访问