首页 > 解决方案 > FormState vs FormFieldState,什么时候用哪个?

问题描述

我目前正在使用

GlobalKey<FormState> state = ...;

它完成了这项工作,我注意到还有另一个类FormFieldState也有相同的回调,FormState所以我也可以使用

GlobalKey<FormFieldState> state = ...;

那么,何时使用哪一个,谁能举一个例子来展示每个的用例?

标签: flutterdart

解决方案


想象一下,您有一个 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();
     },
     ...,
    ),
  ]
)

希望能帮助到你。


推荐阅读