Flutter改變狀態(tài)變量是否必須寫在setState回調詳解
正文
我們都知道 setState(VoidCallback fn) 是這樣用的:
setState(() {
count++;
});執(zhí)行完后組件會重新 build(),就可以取到 count 的最新值了。但其實這樣寫也是一樣的:
count++;
setState(() {});因為 setState() 最后會調用 markNeedsBuild(),F(xiàn)lutter 會調度使組件 rebuild,所以狀態(tài)變量的改變不是必須寫在 setState() 的回調里面,只需要最后執(zhí)行一下 setState() 也可以達到刷新界面的效果。
那為什么 Flutter 要設計 setState() 有個回調函數(shù)呢?有兩個原因:
一是 setState() 的狀態(tài)更新是同步的,如果你在 fn 里返回了一個 Future 去改變狀態(tài)的值,setState 內(nèi)部的斷言會提示你不要這樣做,應該在 Future 完成后在同步代碼里去調用 setState 改變狀態(tài)。
二是為了代碼可維護性考慮。試想一下隨著業(yè)務代碼的迭代,可能會有很多狀態(tài)變量會發(fā)生改變,比如一開始只有狀態(tài)變量 a,后來加入了狀態(tài)變量 b 和 c,代碼變成這樣:
a++;
b++;
c++;
setState(() {});當后續(xù)業(yè)務發(fā)生變化這些狀態(tài)變量都不需要了,后面維護的童鞋把這些狀態(tài)變量都刪除了。因為大家通常都只關注改自己的代碼,會有可能忘記刪除最后的 setState,代碼就變成了這樣:
// a++;
// b++;
// c++;
setState(() {});這樣就造成了不必要的 rebuild 浪費。所以綜上所述,特別是考慮到代碼的維護性,我們都應該把狀態(tài)變量的改變放到 setState 的回調里面。
以上就是Flutter改變狀態(tài)變量是否必須寫在setState回調詳解的詳細內(nèi)容,更多關于Flutter改變狀態(tài)變量setState回調的資料請關注腳本之家其它相關文章!
相關文章
Android實現(xiàn)CoverFlow效果控件的實例代碼
這篇文章主要介紹了Android實現(xiàn)CoverFlow效果控件的實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05
Android利用Service開發(fā)簡單的音樂播放功能
這篇文章主要介紹了Android利用Service開發(fā)簡單的音樂播放功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧2023-04-04
Android local.properties 文件讀取實例詳解
這篇文章主要介紹了Android local.properties 文件讀取實例詳解的相關資料,需要的朋友可以參考下2017-05-05
Android開發(fā)實現(xiàn)的內(nèi)存管理工具類
這篇文章主要介紹了Android開發(fā)實現(xiàn)的內(nèi)存管理工具類,可實現(xiàn)計算手機內(nèi)部與外部的總存儲空間、可用存儲空間等功能,需要的朋友可以參考下2017-11-11

