官术网_书友最值得收藏!

  • Flutter之旅
  • 張德立
  • 636字
  • 2020-09-08 18:11:36

1.2.2 變量查詢和喚醒程序

_MyHomePageState中并沒有widget屬性,那widget.title是哪里來的?setState是否真的每次在調用時都會執(zhí)行build方法?調試斷點如下:

程序會先運行到第二個斷點,因為程序先執(zhí)行到這里。如果想要對變量進行查詢,可以在變量區(qū)查看,也可以通過變量表達式操作。

在變量區(qū)可以看到this對象中有一個名為_widget的私有成員變量,它是MyHomePage類型。現(xiàn)在進行簡單的推理,_MyHomePageState并未定義_widget屬性,那必然是其父類中的成員,_MyHomePageState繼承自State類,所以widget必定在State類中:

這里調用的是widget而非_widget,這時就要去State源碼里一探究竟了(代碼如下)??梢娫创a中返回一個T泛型的對象_widget。這里get關鍵字也是Dart的一顆語法糖,相當于Java的getXXX,無論是寫法還是用法都比Java簡潔優(yōu)雅。


---->[State]----
abstract class State<T extends StatefulWidget> extends Diagnosticable{
   T get widget => _widget;
   ...
}

到這里似乎清晰許多,State本身接收一個StatefulWidget泛型類,這里_widget便是該類型對象。通過State#widget的方法獲取組件對象,因此可拿到其中定義的屬性值,如title。

但還有個問題:State是一個抽象類,并沒有對_widget屬性進行賦值,那_widget賦值的時機在哪呢?這里先埋一個伏筆,這個問題將在Day 8中進行解答。當然你也可以嘗試用Debug自己找一找,鍛煉一下。

使用鍵可以將程序喚醒,擊碎當前斷點。當程序運行到下一斷點時,會再次停下。注意,由于默認開發(fā)模式有熱加載,build會被執(zhí)行兩次,所以點一下不動是正常的,其實是已經走了一圈,又停在這里而已。這時會發(fā)現(xiàn)界面已經顯示出來了。

接下來會發(fā)現(xiàn)Debug面板如下,不懂Debug的人可能認為已經結束了。但是斷點還在那看守著呢,點擊加號按鈕時會讓程序在setState里的斷點處停下,點擊喚醒按鈕,程序會跳到build里的斷點,這說明setState方法確實會觸發(fā)build方法。

主站蜘蛛池模板: 勃利县| 赤峰市| 邵武市| 成武县| 寿宁县| 新和县| 庄河市| 云龙县| 金溪县| 平乡县| 和政县| 五莲县| 明星| 恩平市| 宜兰县| 秦安县| 诸暨市| 邛崃市| 特克斯县| 凤阳县| 谷城县| 依兰县| 边坝县| 莆田市| 屯昌县| 仙居县| 巴东县| 沂南县| 鞍山市| 迁安市| 望谟县| 汨罗市| 舟山市| 西华县| 本溪市| 皋兰县| 辽宁省| 桃源县| 海城市| 林周县| 南宁市|