TextTreeRenderer這個(gè)類(lèi)是很有意思的,它差不多有300多行代碼,但是只有三個(gè)方法,更嚴(yán)格來(lái)說(shuō)是只有兩個(gè)方法。因?yàn)殚_(kāi)放的(public)render方法也是通過(guò)私有的(private)_debugRender實(shí)現(xiàn)其主要功能的;另一個(gè)是_childTextConfiguration方法,這個(gè)方法只有兩行代碼實(shí)現(xiàn)。所以這個(gè)類(lèi)重心就是在_debugRender方法,在解讀_debugRender方法之前,我們先說(shuō)說(shuō)屬性吧。
屬性:
- _wrapWidth 這個(gè)屬性對(duì)應(yīng)的值是int類(lèi)型,代表的一行最大字符數(shù)
- _wrapWidthProperties 這個(gè)屬性對(duì)應(yīng)的值也是int類(lèi)型,代表的屬性一行的最大字符數(shù)。
- _minLevel 這個(gè)屬性對(duì)應(yīng)的值是DiagnosticLevel枚舉類(lèi)型,定義了當(dāng)當(dāng)前的子節(jié)點(diǎn)的level低于_minLevel時(shí)是會(huì)被過(guò)濾掉的,即不會(huì)輸出和展示。
- _maxDescendentsTruncatableNode 這個(gè)屬性對(duì)應(yīng)的值也是int類(lèi)型,對(duì)應(yīng)的值代表最大子孫節(jié)點(diǎn)的個(gè)數(shù)
方法:
- _childTextConfiguration 這個(gè)方法就是獲取當(dāng)前的節(jié)點(diǎn)的子孫節(jié)點(diǎn)的textStyle,返回值的類(lèi)型是TextTreeConfiguration。內(nèi)部實(shí)現(xiàn)也很好看懂,就是當(dāng)子節(jié)點(diǎn)是單行的樣式和DiagnosticsTreeStyle.errorProperty就使用當(dāng)前節(jié)點(diǎn)的樣式,除此之外就用子節(jié)點(diǎn)本身的樣式。
- render 這個(gè)方法在release環(huán)境就是直接返回空字符串的,非release環(huán)境就是調(diào)用的下方的_debugRender方法
- _debugRender這個(gè)方法內(nèi)部的實(shí)現(xiàn)初一看是很復(fù)雜的,但是如果很熟悉
這是解讀flutter foundation的diagnostic中的一篇,如有錯(cuò)漏之處,還望斧正。