- 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方法。
- Hands-On Machine Learning with scikit:learn and Scientific Python Toolkits
- Access 2010數(shù)據(jù)庫基礎與應用項目式教程(第3版)
- Apache Karaf Cookbook
- 21天學通C++(第6版)
- Scala編程實戰(zhàn)(原書第2版)
- Python深度學習:基于TensorFlow
- 快速入門與進階:Creo 4·0全實例精講
- 寫給大家看的Midjourney設計書
- C語言程序設計
- 面向對象程序設計及C++(第3版)
- Spring Boot從入門到實戰(zhàn)
- Kotlin語言實例精解
- Java程序設計及應用開發(fā)
- Flutter從0基礎到App上線
- jQuery權威指南