Flutter 中widget key的作用
2020-06-19 本文已影响0人
简单Timor
-
flutter 的构成。flutter 包括三个树形结构
widget树
、element树
、RenderingObject树
。 -
flutter属于
增量更新
。每次更新界面时,都会调用build进行渲染,此时widget中调用canUpdate
方法,canUpdate
会去对比现有控件和旧控件的runtimeType
和widget
中的key值。如果都相同则不更新,反之更新界面。
static bool canUpdate(Widget oldWidget, Widget newWidget) {
return oldWidget.runtimeType == newWidget.runtimeType
&& oldWidget.key == newWidget.key;
}
3.在StatelessWidget
中,因为不可变,element 的值没有报存在element中,所以update也不会改变原有界面。
在StatefulWidget
中,值保存在_State,如果没有标记key。则当更新界面时,会重新调用Widget build(BuildContext context)
方法。此时,widget 赋值会从头开始从element中拿取数据,放入widget。当删除为【widget[0]】时,就会出现element中数据和widget不一致。 此时就需要key,来进行特殊标识,达到 element
和 widget
一一对应的作用。