Flutter 什么时候应该在颤振小部件构造函数中指定一个关键参数?

Flutter 什么时候应该在颤振小部件构造函数中指定一个关键参数?,flutter,dart,parameters,Flutter,Dart,Parameters,我对飞镖和飞镖很陌生。在阅读了来自多个来源的一些代码之后,我想知道,无论何时实现颤振小部件构造函数,我是否应该指定Key参数。我发现的一些代码不使用Key参数,而其他代码广泛使用它 以下代码段是从节复制的。它使用键参数 class Frog extends StatelessWidget { const Frog({ Key key, this.color = const Color(0xFF2DBD3A), this.child, }) : super(key:

我对飞镖和飞镖很陌生。在阅读了来自多个来源的一些代码之后,我想知道,无论何时实现颤振小部件构造函数,我是否应该指定
Key
参数。我发现的一些代码不使用
Key
参数,而其他代码广泛使用它

以下代码段是从节复制的。它使用
参数

class Frog extends StatelessWidget {
  const Frog({
    Key key,
    this.color = const Color(0xFF2DBD3A),
    this.child,
  }) : super(key: key);

  final Color color;
  final Widget child;

  @override
  Widget build(BuildContext context) {
    return Container(color: color, child: child);
  }
}
问题:
什么时候应该在颤振小部件构造函数中指定一个
参数?

默认情况下,框架根据小部件的运行时类型和出现顺序匹配当前和以前构建中的小部件。对于键,框架要求两个小部件具有相同的键和相同的运行时类型

键在构建同一类型小部件的多个实例的小部件中最有用。例如,ShoppingList小部件,它只构建足够的ShoppingListItem实例来填充其可见区域:

如果没有键,当前构建中的第一个条目将始终与上一个构建中的第一个条目同步,即使从语义上讲,列表中的第一个条目刚刚从屏幕上滚下,在视口中不再可见

通过为列表中的每个条目分配一个“语义”键,无限列表可以更高效,因为框架将条目与匹配的语义键同步,从而实现相似(或相同)的视觉外观。此外,在语义上同步条目意味着有状态子窗口小部件中保留的状态仍然附加到相同的语义条目,而不是视口中处于相同数字位置的条目


请看这段视频,它来自Flitter团队:

非常感谢。这是否意味着始终指定键是一种好的做法?@NotAZoomedImage仅当您发现自己添加、删除或重新排序了一组具有某种状态的相同类型的小部件时才适用。大多数时候你不需要钥匙。