gpt4 book ai didi

flutter - 覆盖 operator== 是否有助于避免重建?

转载 作者:IT王子 更新时间:2023-10-29 07:07:06 28 4
gpt4 key购买 nike

我有一个无状态的小部件

class Foo extends StatelessWidget {
final String text;
A(this.text);
Widget build(BuildContext _) => Text(text);
}

假设我在小部件树中的某处创建了一个“Foo”实例(很少)更改“文本”。当然,每当我创建一个新的“Foo”实例时,即使它具有相同的“文本”,它的“构建”也会被调用。

是否会引入一个检查“文本”的“operator==”来避免重建?

编辑:小部件树中只有一个“Foo”实例,但它始终是每个父构建的新实例。

编辑:

我想我在‘framework.dart’中找到了 Flutter 代码库中的位置:

if (child.widget == newWidget) {
if (child.slot != newSlot)
updateSlotForChild(child, newSlot);
return child;
}

因此,如果一个 Widget 覆盖了“运算符 ==”,则同一个 Widget 类的两个“相等”实例不会将子树标记为脏,因此不会触发子树“构建”。

因此,覆盖“operator ==”有助于优化性能!

有人可以证实吗?

编辑:

我在 GitHub 上开了一张工单,要求 Flutter 团队就 widget 树的重建澄清“相同”与“相等”与“相同”。

https://github.com/flutter/flutter/issues/38740

最佳答案

您想知道是否在小部件树的不同部分创建 Foo() 的 2 个实例,并且覆盖 == 将确保 build() 只会被调用一次?即使你有 2 个独立的对象?我完全怀疑......虽然,我们知道 Flutter 为所有 const 实例优化了 widget 树,如果某些父部件自行重建,则不会重建 const Stateless 子部件。

关于flutter - 覆盖 operator== 是否有助于避免重建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57530086/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com