2017-05-09 44 views
4

哪裏應該保持最終值?保持小部件或狀態的最終字段?

StatefulWidget(當然我的子類)實例,然後從State(子類)訪問它通過widget.thatFinalField,或

State本身。我已經看到兩種方法了。對他們每個人都有利弊。

回答

5

您應該在StatefulWidget上存儲final成員字段(通過構造函數參數傳遞)並將其公開。

StatefulWidget的關聯State應該只使用默認構造函數(無參數),其成員字段應該是私有的(從_開始)並且是可變的。如果需要昂貴或異步工作,請將它們初始化爲內聯或initState

這種模式允許StatefulWidget重新創建/新構造函數的參數重建時,其父母打電話setState,而重新使用以前State,讓它保持存儲在其可變成員字段中的值。

+0

最後流訂閱怎麼樣?從服務或注入器類獲得。 – DogeLion

+0

構建你的StatefulWidget及其相關狀態應該不會有任何副作用。如果你正在做任何有副作用的工作來初始化你的小部件,你應該在initState()中做並將它保存到可變成員變量中。確保在處理完後自行清理()。 –