这个文件有近3800行代码,内容非常多,我会以类的角度来一个一个写。
- TextTreeConfiguration
- _PrefixedStringBuilder
- TextTreeRenderer
- DiagnosticsNode(抽象类)
- DiagnosticableNode(继承自DiagnosticsNode)
- DiagnosticableTreeNode(继承自DiagnosticableNode)
- DiagnosticPropertiesBuilder
- DiagnosticableMixin(即将被移除,目前项目并没有地方用到)
- 混合类型Diagnosticable
- DiagnosticableTree(抽象类 with(混合)Diagnosticable) 和 混合类型DiagnosticableTreeMixin(implements(实现) DiagnosticableTree)
- DiagnosticsBlock(继承自DiagnosticsNode)
- DiagnosticsSerializationDelegate(抽象类)和 _DefaultDiagnosticsSerializationDelegate(implements(实现) DiagnosticsSerializationDelegate)
- DiagnosticsProperty(继承自DiagnosticsNode)
- MessageProperty, StringProperty, _NumProperty, DoubleProperty, IntProperty, PercentProperty, FlagProperty, IterableProperty, ObjectFlagProperty和FlagsSummary(继承自DiagnosticsProperty)。
看起来真是头皮发麻,不着急,一点点抽丝剥茧慢慢看代码。
-
TextTreeConfiguration这个类没有方法,只有一些属性。点击此处,可以详细了解TextTreeConfiguration。
-
_PrefixedStringBuilder这个类是一个前缀的字符串构造者。点击此处,可以详细了解_PrefixedStringBuilder
-
TextTreeRenderer这个类是diagnostics的核心类之一,它实现了对节点(node)的属性和子孙的遍历过程。点击此处,可以详细了解TextTreeRenderer
-
DiagnosticsNode这个类也是diagnostics的核心类之一,也是一个抽象类,它高度抽象除了节点本身,还有属性列表(properties)和子孙集合(children), 点击此处,可以详细了解DiagnosticsNode
-
DiagnosticableNode这个是继承自DiagnosticsNode,实现很简单,在获取value的时候做了一个懒加载处理,此外简单实现了getChildren和getProperties两个方法
-
DiagnosticableTreeNode这个类继承了DiagnosticableNode,这个类实现超级简单,只是重写了getChildren方法,就是在value不为null时,返回value.debugDescribeChildren()。
-
DiagnosticPropertiesBuilder这个类很简单, 点击此处,可以详细了解DiagnosticPropertiesBuilder
-
整个flutter项目也没有地方用到,而且文档已经说明即将会被移除
-
这个是Diagnosticable,定义的也很基础,点击此处,可以详细了解Diagnosticable
-
DiagnosticableTree和DiagnosticableTreeMixin实现基本是一样的,点击此处,可以详细了解DiagnosticableTree和DiagnosticableTreeMixin
-
DiagnosticsBlock这个类的定义,从文档显示是因为DiagnosticsNode存在的意义通常是为缺乏有意义的值的展示提供容器,而DiagnosticsBlock通常是展示复杂的内嵌错误信息。这个目的是最重要的,其他的一些属性和方法和DiagnosticsNode相比没有什么不同。
-
DiagnosticsSerializationDelegate和_DefaultDiagnosticsSerializationDelegate,_DefaultDiagnosticsSerializationDelegate实现了DiagnosticsSerializationDelegate,他们也相对比较独立,所以也放在一起说,点击此处,可以详细了解 DiagnosticsSerializationDelegate和_DefaultDiagnosticsSerializationDelegate
-
DiagnosticsProperty这个类是继承DiagnosticsNode的,这个类是DiagnosticsNode抽象类在属性(property)方面的具体类,属性和方法上做了具体的一般实现,看源码也是一目了然的
-
MessageProperty, StringProperty, _NumProperty, DoubleProperty, IntProperty, PercentProperty, FlagProperty, IterableProperty, ObjectFlagProperty和FlagsSummary,这些类很多,但是都是继承DiagnosticsProperty类的,其实每个实现就是做了一些个性化的实现,根据名字也很好知道是做什么的。
这篇文章就是解读foundation模块下最大的文件diagnostics.dart的内容的。如有不足之处,还望斧正。
网友评论