是否应将“ key”用于其他小部件类型,例如“ FutureBuilder”和“ StreamBuilder”?

时间:2019-03-02 03:32:25

标签: flutter

建议在key的集合中使用StatefulWidget,这是否意味着我们也应该对keyFutureBuilder使用StreamBuilder(因为显然,这些不是StatelessWidget

更新:推荐来自When to Use Keys - Flutter Widgets 101 Ep. 4

1 个答案:

答案 0 :(得分:0)

我不确定您从何处得知应该在StatefulWidget集合中使用键;在特定情况下确实如此,但是通常您不必担心它们。

StatefulWidget docs中列举了一些使用键变得很重要的特定情况,但这可能不适用于列表,而是适用于列表中的单个项目,当您使用时更适用开始移动很多东西。如果遇到性能问题,将列表中的各个元素放入StatefulWidget子类中,而不是在列表生成器函数中构建它们,可能会比从处理键中获取更多的好处。

但是实际上,在大多数情况下,最好不要使用键,直到开始遇到性能问题或在页面中四处移动然后开始考虑它们。

编辑:现在我已经看过video posted in the comment from the OP,我对他在说什么有了更好的了解。再次,尽管如此-视频讨论了在特定情况下何时使用按键,即为更改顺序的列表排序,保持滚动位置等。

通常为most of the time you don't [need keys]。如果您要构建一个可移动的列表,并且每个列表项的根都是FutureBuilder,则需要为它提供一个密钥,但是除非您的用法属于视频中给出的示例之一,否则您可能不需要使用密钥。

如果您对使用FutureBuilder或StreamBuilder的特定场景有疑问,并且您认为可能有必要,但是不确定,请打开一个问题。这是一个非常广泛的问题-我相信您可以提出一个人为的示例,说明FutureBuilder或StreamBuilder何时需要密钥,但通常不需要密钥。