Flutter 中widget key的作用

2020-06-19  本文已影响0人  简单Timor
  1. flutter 的构成。flutter 包括三个树形结构 widget树element树RenderingObject树

  2. flutter属于增量更新。每次更新界面时,都会调用build进行渲染,此时widget中调用canUpdate方法,canUpdate会去对比现有控件和旧控件的 runtimeTypewidget中的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,来进行特殊标识,达到 elementwidget 一一对应的作用。

上一篇下一篇

猜你喜欢

热点阅读