为啥 Flutter 文档在创建 Form 时要求使用 GlobalKey 而不是其他类型的键?

Posted

技术标签:

【中文标题】为啥 Flutter 文档在创建 Form 时要求使用 GlobalKey 而不是其他类型的键?【英文标题】:Why does Flutter doc ask you to use GlobalKey when creating Form instead of other types of keys?为什么 Flutter 文档在创建 Form 时要求使用 GlobalKey 而不是其他类型的键? 【发布时间】:2020-01-16 11:09:18 【问题描述】:

根据颤振文档https://flutter.dev/docs/cookbook/forms/validation,它说如下。

创建表单时,提供一个 GlobalKey。

但是,GlobalKey doc 表示此密钥价格昂贵,建议开发人员使用其他类型的密钥。

考虑使用 Key、ValueKey、ObjectKey 或 UniqueKey(而不是 globalKey)

GlobalKey 用于Form 有什么好处?

【问题讨论】:

【参考方案1】:

我认为这些文档很容易解释。

GlobalKey:在整个应用程序中唯一的密钥。

当您创建 Form 时,您希望它是唯一的,并且使用 GlobalKey 您可以识别表单。

并且文档警告您在多个地方避免使用GlobalKey,例如,如果您使用ListView 并分配每个孩子GlobalKey,这是一种不好的方法,但是使用GlobalKey 并没有什么坏处如果你小心使用它。

【讨论】:

如果我在应用程序中使用唯一字符串构造常规Key... 1. 是否等同于使用GlobalKey? 2. 这样可以吗? 1.不,这不等于GlobalKey,因为如果您分配一个小部件Key("unique_string"),然后如果该小部件从小部件树中删除,您仍然可以使用上述键创建另一个小部件而没有任何问题,但是使用GlobalKey,您不能只这样做,它在您的小部件树的整个生命周期中都是独一无二的。如果您尝试将相同的 GlobalKey 分配给 2 个小部件,则会在 2 个地方使用相同的 GlobalKey 时出现异常。 GlobalKey 比其他 Keys 非常独特。 为什么我最好首先识别我的表单?如果我不给我的表单一个唯一的键会发生什么?

以上是关于为啥 Flutter 文档在创建 Form 时要求使用 GlobalKey 而不是其他类型的键?的主要内容,如果未能解决你的问题,请参考以下文章

Flutter GetX 为啥控制器在导航时没有自动删除

为啥 Flutter Navigator 2.0 示例中没有返回按钮?

Flutter:为啥这个流构建器不起作用?

为啥 drools 5.4 文档没有说明 JBPM FORM BUILDER 和与 Guvnor 的集成

为啥 libreoffice sdk 在通过 Web 服务同时创建文档时会崩溃?

为啥在使用 Flutter 模块构建 iOS 原生应用时修复“Frameworks/Flutter.framework: Permission denied”?