FormState与FormFieldState,什么时候用哪个?

问题描述 投票:0回答:1

我目前使用的是

GlobalKey<FormState> state = ...;

我注意到还有一个类是 FormFieldState 它也有和 FormState 所以我也可以用

GlobalKey<FormFieldState> state = ...;

那么,什么时候用哪个,谁能举个例子演示一下每个的用例?

flutter dart
1个回答
1
投票

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

希望能帮到你

© www.soinside.com 2019 - 2024. All rights reserved.