[英]Does overriding operator== help to avoid rebuilding?
我有一個無狀態的小部件
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覆蓋了'operator ==',則相同Widget類的兩個相等的實例將不會將子樹標記為臟,因此不會觸發子樹“ build”。
因此,覆蓋'operator =='可以幫助優化性能!
有人可以確認嗎?
編輯:
我在GitHub上打開了一張票,請Flutter團隊就小部件樹的重建澄清“相同”還是“相等”還是“相同”。
您想知道是否在小部件樹的不同部分中創建2個Foo()實例,並重寫==將確保build()僅被調用一次? 即使您有2個單獨的對象? 我完全懷疑……盡管,我們知道Flutter為所有const實例優化了小部件樹,如果某些父小部件自行重建,則不會重建const Stateless小部件子級。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.