- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我有一个无状态的小部件
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 树的重建澄清“相同”与“相等”与“相同”。
最佳答案
您想知道是否在小部件树的不同部分创建 Foo() 的 2 个实例,并且覆盖 == 将确保 build() 只会被调用一次?即使你有 2 个独立的对象?我完全怀疑......虽然,我们知道 Flutter 为所有 const 实例优化了 widget 树,如果某些父部件自行重建,则不会重建 const Stateless 子部件。
关于flutter - 覆盖 operator== 是否有助于避免重建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57530086/
是否有任何工具可以帮助 JSP 文件中的字符串国际化? 大多数 IDE(例如 NetBeans)都为 Java 代码提供了这样的功能。但是,对于 NetBeans,JSP 文件不存在此类功能。 与 g
我在 Android Studio 项目的纯 Java 模块中使用 Lombok。这是模块的 build.gradle: apply plugin: 'java' apply plugin: 'war
我是一名优秀的程序员,十分优秀!