簡體   English   中英

應該在類中還是在build()函數中創建Flutter小部件?

[英]Should Flutter widgets be created in the class or in the build() function?

是否有最佳方法可以在哪里創建小部件的一般經驗法則(假設小部件不依賴傳遞給build()的任何東西)?

如果我們在類內創建一個Widget:

Foo({Key key}) : super(key: key);
Widget _widget = new Container(); // Create here?

創建類后,我們只會創建一次。 但是,如果未始終在build()中使用此窗口小部件,則它可能會占用空間(例如,后台窗口小部件,或者該窗口小部件的可見性由標志確定)。

如果我們在build()中創建小部件:

@override
Widget build(BuildContext context) {
Widget widget = new Container(); // Or create here?
  return widget;
}

在每次build()調用時都會重新創建該小部件,這感覺很昂貴,尤其是如果小部件沒有變化。

在Flutter / Dart中,構造短期對象通常非常便宜,並且小部件層負責確保除非重新構建小部件,否則在重建時不會修改渲染樹。 因此,在正常情況下,緩存小部件沒有太大幫助。 我傾向於在您的build()方法中構造小部件,除非有原因不能解決。

通常無需關心這種優化。 但是,請盡可能使用const構造函數。

但是請記住,您應該將模型直接用作小部件。 您不應該具有將模型類的實例作為輸入的Widget。 相反,應該是您的模型類具有構建方法。 結果,當以您的狀態存儲數據時,您不必在每次調用Build時都重新創建新的小部件。

一個很好的例子是flutter的代碼實驗室中的ChatMessage列表。 https://codelabs.developers.google.com/codelabs/flutter/index.html#5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM