【发布时间】:2019-04-27 07:45:01
【问题描述】:
关于如何更新ListView 的文档here 说:
在 Flutter 中,如果您要更新一个 setState(),你会很快看到你的数据没有改变 视觉上。这是因为当调用 setState() 时,Flutter 渲染引擎查看小部件树以查看是否有任何内容 改变了。当它到达您的 ListView 时,它会执行 == 检查,然后 确定两个 ListView 相同。什么也没有变, 所以不需要更新。
要更新 ListView 的简单方法,请在 setState(),并将旧列表中的数据复制到新列表中。
在这种情况下,我不明白渲染引擎如何确定小部件树中是否有任何更改。
AFAICS,我们关心调用setState,它将State 对象标记为脏并要求它重建。一旦它重建,就会有一个新的ListView,不是吗?那么== 怎么会说它是同一个对象呢?
另外,新的List 将在State 对象内部,Flutter 引擎会比较State 对象内的所有对象吗?我以为它只比较了Widget 树。
所以,基本上我不明白渲染引擎如何决定要更新什么以及要忽略什么,因为我看不到创建新的List 是如何将任何信息发送到渲染引擎的,因为文档说渲染引擎只是寻找一个新的ListView... AFAIK 一个新的List 不会创建一个新的ListView。
【问题讨论】:
-
这是我在阅读文档时遇到的一个理论问题。不涉及实际代码