這個模塊的源碼和diagnostics文件里源碼關系非常密切,這個文件里源碼有1000多行。
接下來會對每個類的進行解析,如有不足之處晴裹,可以在下面評論指出。
第一部分說的一些類在assertions文件里比較獨立救赐,第二部分的內容就和diagnostics非常密切涧团。
第一部分:
- PartialStackFrame這個類相比StackFrame, 就簡單很多,也就很容易理解為什么有Partial(部分的)這個前綴经磅。這個類只有三個屬性:package泌绣,className和method。還有一個matches方法预厌,傳入的參數是StackFrame類型的阿迈,主要是通過package,className和method屬性的值與StackFrame類型的傳入參數對應的屬性值是否相等來判斷是后匹配轧叽。
- StackFilter這個是一個抽象類苗沧,主要就是一個filter抽象方法,在棧幀(StackFrame)列表(list)中過濾出一些匹配棧幀片段(StackFrame), 這些片段也是list類型的炭晒。
- RepetitiveStackFrameFilter這個類繼承了StackFilter待逞,從它的名字再結合代碼就可以知道它的主要任務是從一個大的StackFrame類型的list里匹配PartialStackFrame類型的小的list,其中具體是否匹配就是通過第一條PartialStackFrame中matches方法實現的网严。該類的filter和_matchesFrames方法還是很好理解的识樱,就不再贅述了。
第二部分:
- _ErrorDiagnostic繼承了DiagnosticsProperty, 內部實現還是很簡單的,就難在DiagnosticsProperty的理解上怜庸,點開鏈接就能看到對DiagnosticsProperty的解讀当犯。
- ErrorDescription繼承了_ErrorDiagnostic,只是定義了這個類的level的值是DiagnosticLevel.info割疾。
- ErrorSummary繼承了_ErrorDiagnostic嚎卫,也只是定義了這個類的level的值是DiagnosticLevel.summary。
- ErrorHint繼承了_ErrorDiagnostic宏榕,也只是定義了這個類的level的值是DiagnosticLevel.hint拓诸。
- ErrorSpacer繼承自DiagnosticsProperty,其實就是創(chuàng)建了一個空的DiagnosticsNode的類担扑,可以用來調整DiagnosticsNode對象間的距離的。
- FlutterErrorDetails這個類混合了(with)Diagnosticable趣钱,主要作用是FlutterExceptionHandler回調的參數類型涌献,這個類的形參除了exception不能為null,其他的都可以是默認值首有。這個類有很多屬性propertiesTransformers, exception, stack, library, context, stackFilter, informationCollector, silent燕垃。需要先明白diagnostics的內部實現,就能很清晰的知道內部邏輯井联。
- _FlutterErrorDetailsNode這個內部類是繼承DiagnosticableNode的卜壕,只有一個builder的get方法。
- DiagnosticsStackTrace這個類是繼承DiagnosticsBlock烙常,這個類的內部實現是封建的轴捎,只有一些初始化的方式。
這是flutter框架源碼分析的其中一篇蚕脏,因能力有限侦副,有諸多不足之處,還請斧正驼鞭。