【问题标题】:What are keys used for in Flutter framework? [duplicate]Flutter 框架中的 key 是做什么用的? [复制]
【发布时间】:2018-10-14 06:57:22
【问题描述】:

Flutter 是一个了不起的框架,简单易用。我必须看到文档非常好,但有些概念对我来说仍然很模糊,例如key 参数。根据文档A Key is an identifier for Widgets, Elements and SemanticsNodes. 很清楚,但是为什么我需要识别我的小部件。到目前为止,我从未在编码中使用过密钥。在我的代码中使用密钥有什么好处吗?谢谢。

【问题讨论】:

标签: flutter


【解决方案1】:

大多数时候您不需要使用 Keys,框架会为您处理它并在内部使用它们来区分小部件。不过,在某些情况下您可能需要使用它们。

一个常见的情况是,如果您需要通过键来区分小部件,ObjectKey 和 ValueKey 可用于定义小部件的区分方式。一个例子是PageStorageKey,另一个是带有动画删除的列表:https://flutter.io/cookbook/gestures/dismissible/

另一个例子是,如果你有一个想要从父级访问的子级,你可以在父级中创建一个 GlobalKey 并将其传递给子级的构造函数。然后您可以执行 globalKey.state 来获取孩子的状态(例如在按钮按下回调中)。请注意,不应过度使用它,因为通常有更好的方法来解决它。

在您使用直接告诉您为其子项定义键的小部件之前,您可能永远不必考虑它。

【讨论】:

  • 非常感谢这个澄清。但我还是很困惑。例如,在此链接flutter.io/widgets-intro/#keys 提供的示例中,无论是否使用键,代码仍然有效
  • 如果您在谈论 ShoppingList 示例 - 是的,它可能以任何一种方式工作,因为它非常基本,但是当您开始执行诸如删除或添加行为之类的操作时会变得更加复杂。例如,当您删除第二个项目时,它实际上可能不会删除第二个小部件,而只是将其更改为包含先前在第三个中的值,并将第 4 个值包含在第 3 个中,依此类推。在一个看起来相同的基本列表中.但是,如果您尝试执行动画删除之类的操作,或者有一个很长的列表(即 100 或 1000 或项目),则区分变得非常重要。
  • 实际上,不推荐使用GlobalKey。您几乎总能找到使用它的方法。 Key 最常见的用法是当您需要在子列表中列出动画时。例如添加/删除,或简单的重新排序。
  • @RémiRousselet 请提供参考以表明不推荐使用 GlobalKey。
  • @RémiRousselet 虽然我同意不应该过多使用全局键,但它可能比可关闭列表更频繁地出现,但这完全是主观的,取决于您正在构建的应用程序。我已经把那个特定的部分去掉了。但它在一些颤振演示中使用,并且在颤振的源代码(即导航器)中相当频繁地使用。如果您开始在小部件之间进行复杂的动画和交互,那么它是必不可少的。它绝对不会被弃用,因为这意味着它不能被使用并且不会存在于框架的未来版本中。
猜你喜欢
  • 2019-07-24
  • 2014-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-05
  • 2014-10-30
  • 2016-06-10
相关资源
最近更新 更多