flutter中的key
key作用
- 仅当
widget
有状态时,才需要设置key
。如果是无状态的widget
则不需要设置key
。 - 是否复用旧元素根据
widget类型
和key
决定,若在没用key
的情况下,若类型相同则表示新旧widget可复用。 - 使用了
key
的stf widget
不会出触发didUpdateWidget
;不使用key
,stf widget
的state类
里面的属性更新需要通过didUpdateWidget
来改变state类里的属性。
key类型
LocalKey
ValueKey
:接受字母、数字或其他基本类型的值,通常用于列表等场景,确保每个子项的值唯一且恒定。ObjectKey
:接受一个对象作为参数,只有当对象相等时,Key才相等,适用于对象实例唯一标识的场景。UniqueKey
:每次创建都是唯一的,常用于临时标识,无法复用,适合需要强制刷新或重建widget的场景。
GlobalKey
LabeledGlobalKey
:带有标签的全局Key,主要用于调试和区分不同的全局Key实例。GlobalObjectKey
:基于对象的全局Key,只有当传入的对象相等时,Key才相等,常用于需要跨组件树共享状态的场景。