为什么表单在Flutter中需要GlobalKey?

为什么表单在Flutter中需要GlobalKey?,flutter,Flutter,他们在表格中使用了GlobalKey 从这里开始: 全局键唯一地标识元素。全局密钥提供对 与这些元素关联的其他对象,例如 构建上下文。对于StatefulWidget,全局键还提供对 国家 具有全局键的窗口小部件在创建子树时会重新分配它们的子树 从树中的一个位置移动到树中的另一个位置。 为了重新划分它的子树,小部件必须到达它的新位置 树中的位置,该位置位于树所在的同一动画帧中 从树中的旧位置删除 使用全局键重新租用元素的成本相对较高,如下所示: 此操作将触发对上State.deactivate的

他们在
表格中使用了
GlobalKey

从这里开始:

全局键唯一地标识元素。全局密钥提供对 与这些元素关联的其他对象,例如 构建上下文。对于StatefulWidget,全局键还提供对 国家

具有全局键的窗口小部件在创建子树时会重新分配它们的子树 从树中的一个位置移动到树中的另一个位置。 为了重新划分它的子树,小部件必须到达它的新位置 树中的位置,该位置位于树所在的同一动画帧中 从树中的旧位置删除

使用全局键重新租用元素的成本相对较高,如下所示: 此操作将触发对上State.deactivate的调用 关联州及其所有后代;然后强制所有小部件 这取决于要重建的InheritedWidget

如果您不需要上面列出的任何特性,请考虑使用 键、ValueKey、ObjectKey或UniqueKey

上述引文中的哪项功能正以该形式使用,因此需要一个
GlobalKey


为什么那里需要GlobalKey,为什么其他任何键都不起作用?

我认为GlobalKey
上使用的重要功能是
formKey.currentState.validate()
方法,用于验证
表单中的所有
TextFormField
小部件。由于
GlobalKey
可以访问
FormState
的当前状态


在其他键类型中,例如
ValueKey
无法访问
FormState

的当前状态,我认为
GlobalKey
上使用的重要功能是
formKey.currentState.validate()
方法,用于验证
表单中的所有
TextFormField
小部件。由于
GlobalKey
可以访问
FormState
的当前状态


在其他键类型中,例如
ValueKey
无法访问
FormState

的当前状态,his是因为他们需要
FormState
,并且他们通过
key.currentState
获取它-您可以通过调用
FormState.of
静态方法来获取
FormState
,因为他们需要
FormState
并且它们通过
键来获取它。currentState
-您也可以通过调用
Form.of
静态方法来获取
FormState