flutter - FormState vs FormFieldState,什么时候用哪个?
问题描述
我目前正在使用
GlobalKey<FormState> state = ...;
它完成了这项工作,我注意到还有另一个类FormFieldState
也有相同的回调,FormState
所以我也可以使用
GlobalKey<FormFieldState> state = ...;
那么,何时使用哪一个,谁能举一个例子来展示每个的用例?
解决方案
想象一下,您有一个 Widget A,其中包含一个带有 2TextFormField
和一个按钮的表单:
小部件A
...
Column(
children: [
Form(
child: Column(
children: [
TextFormField(...),
TextFormField(...),
]
),
),
Button(...),
]
)
现在您想在用户按下按钮时验证表单。GlobalKey<FormState> state
在这种情况下,这将是您的救命稻草,因为您可以这样做:
Column(
children: [
Form(
key: state,
child: Column(
children: [
TextFormField(...),
TextFormField(...),
]
),
),
Button(
onPressed: state.currentState.validate,
...,
),
]
)
然后想象 aTextFormField
有一个错误,并且您想在第一个中重置错误TextFormField
并在第二个中保留错误TextFormField
。在这种情况下,调用state.currentState.reset()
没有帮助,因为它会重置整个表单。因此,您需要使用GlobalKey<FormFieldState> firstFormFieldState
,您可以通过以下方式解决此问题:
Column(
children: [
Form(
key: state,
child: Column(
children: [
TextFormField(
key: firstFormFieldState,
...
),
TextFormField(...),
]
),
),
Button(
onPressed: () {
state.currentState.validate();
firstFormFieldState.reset();
},
...,
),
]
)
希望能帮助到你。
推荐阅读
- c++ - #include .h 文件时编译失败,但 #include .cpp 文件时编译成功
- python-2.7 - 使用Python向二叉树中的缺失节点添加值
- python - 获取变量 pandas 可接受值的函数
- python - 如何从具有特定属性的字典中打印键列表
- sql - SQL 协助 - STUFF 和 XML 路径连接数据
- bash - 为什么我要创建一个别名来创建一个函数?
- java - 如何在 Hazelcast 配置中以编程方式减少 RAM?
- hadoop - 无法启动 Yarn 进程
- javascript - axios 自动将 base url 添加到 json 响应中的 urls 问题
- laravel - 如果用户在 URL Laravel 中键入 POST 路由,中间件会重定向用户