我目前使用的是
GlobalKey<FormState> state = ...;
我注意到还有一个类是 FormFieldState
它也有和 FormState
所以我也可以用
GlobalKey<FormFieldState> state = ...;
那么,什么时候用哪个,谁能举个例子演示一下每个的用例?
想象一下,你有一个Widget A,其中包含一个有2个表单的Widget A。TextFormField
和一个按钮。
WidgetA
...
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,
...,
),
]
)
然后想象一个 TextFormField
出现错误,而你想在第一个 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();
},
...,
),
]
)
希望能帮到你