StatefulWidget和StatelessWidget

Flutter組件分為有狀態(tài)(StatefulWidget)和無狀態(tài)部件(StatelessWidget)成玫,他們的區(qū)別是在運行時重新加載組件的方式不同,StatelessWidget在重新加載組件時候會重新創(chuàng)建當前組件的實例粱甫,StatefulWidget重新加載時不會重新創(chuàng)建實例,只會重新執(zhí)行build()方法

StatelessWidget

StatelessWidget的組件一經創(chuàng)建不可改變谓着,build()函數只會執(zhí)行一次绪商,如果需要重新繪制此組件骂束,則需要重新創(chuàng)建此組件的實例
在StatelessWidget源碼中并沒有看到update()方法

image.png

StatefulWidget

StatefulWidget創(chuàng)建的組件可以多次調用build()重繪,不需要重新創(chuàng)建實例成箫。
這是一個選中Checkbox的例子展箱,跟隨函數調用查看如何重繪

class CheckBoxWidgetState extends State<CheckBoxWidget> {
  bool _isCheck = false;

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Container(
        child: Checkbox(
          value: _isCheck,
          onChanged: (bool value) {
            setState(() {
              _isCheck = value;
            });
          },
        ),
      ),
    );
  }
}

1.通過setState(){}方法使當前widget element執(zhí)行markNeedsBuild()方法

setState.png

2.markNeedsBuild()會將當前的element標記為dirty,并且調用scheduleBuildFor()函數將標記為dirty蹬昌,并調用scheduleBuildFor()將element添加到dirty elements list中混驰,以便在下一幀的時候重建

markNeedsBuild.png

3.進行重建

element的重建,先看下scheduleBuildFor()方法的注釋皂贩,

/// Adds an element to the dirty elements list so that it will be rebuilt
/// when [WidgetsBinding.drawFrame] calls [buildScope].

drawFrame()繪制每一幀執(zhí)行的方法栖榨,

drawFrame.png

在flutter的官網或者drawFrame()的注釋中都標注了繪制每一幀所需要的步驟,其中第三部就是重繪在widget樹中被標記為dirty的element

image.png
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末明刷,一起剝皮案震驚了整個濱河市婴栽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌遮精,老刑警劉巖居夹,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件败潦,死亡現(xiàn)場離奇詭異本冲,居然都是意外死亡,警方通過查閱死者的電腦和手機劫扒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門檬洞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人沟饥,你說我怎么就攤上這事添怔。” “怎么了贤旷?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵广料,是天一觀的道長。 經常有香客問我幼驶,道長艾杏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任盅藻,我火速辦了婚禮购桑,結果婚禮上,老公的妹妹穿的比我還像新娘氏淑。我一直安慰自己勃蜘,他們只是感情好,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布假残。 她就那樣靜靜地躺著缭贡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上阳惹,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天坑资,我揣著相機與錄音,去河邊找鬼穆端。 笑死袱贮,一個胖子當著我的面吹牛,可吹牛的內容都是我干的体啰。 我是一名探鬼主播攒巍,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼荒勇!你這毒婦竟也來了柒莉?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤沽翔,失蹤者是張志新(化名)和其女友劉穎兢孝,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體仅偎,經...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡跨蟹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了橘沥。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窗轩。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖座咆,靈堂內的尸體忽然破棺而出痢艺,到底是詐尸還是另有隱情,我是刑警寧澤介陶,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布堤舒,位于F島的核電站,受9級特大地震影響哺呜,放射性物質發(fā)生泄漏舌缤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一弦牡、第九天 我趴在偏房一處隱蔽的房頂上張望友驮。 院中可真熱鬧,春花似錦驾锰、人聲如沸卸留。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽耻瑟。三九已至旨指,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間喳整,已是汗流浹背谆构。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留框都,地道東北人搬素。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像魏保,于是被迫代替她去往敵國和親熬尺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內容