TextTreeRenderer這個(gè)類是很有意思的,它差不多有300多行代碼活鹰,但是只有三個(gè)方法哈恰,更嚴(yán)格來說是只有兩個(gè)方法。因?yàn)殚_放的(public)render方法也是通過私有的(private)_debugRender實(shí)現(xiàn)其主要功能的志群;另一個(gè)是_childTextConfiguration方法着绷,這個(gè)方法只有兩行代碼實(shí)現(xiàn)。所以這個(gè)類重心就是在_debugRender方法赖舟,在解讀_debugRender方法之前蓬戚,我們先說說屬性吧。
屬性:
- _wrapWidth 這個(gè)屬性對(duì)應(yīng)的值是int類型宾抓,代表的一行最大字符數(shù)
- _wrapWidthProperties 這個(gè)屬性對(duì)應(yīng)的值也是int類型子漩,代表的屬性一行的最大字符數(shù)豫喧。
- _minLevel 這個(gè)屬性對(duì)應(yīng)的值是DiagnosticLevel枚舉類型,定義了當(dāng)當(dāng)前的子節(jié)點(diǎn)的level低于_minLevel時(shí)是會(huì)被過濾掉的幢泼,即不會(huì)輸出和展示紧显。
- _maxDescendentsTruncatableNode 這個(gè)屬性對(duì)應(yīng)的值也是int類型,對(duì)應(yīng)的值代表最大子孫節(jié)點(diǎn)的個(gè)數(shù)
方法:
- _childTextConfiguration 這個(gè)方法就是獲取當(dāng)前的節(jié)點(diǎn)的子孫節(jié)點(diǎn)的textStyle缕棵,返回值的類型是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ò)漏之處,還望斧正触趴。