flutter foundation的diagnostics

这个文件有近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)。

看起来真是头皮发麻,不着急,一点点抽丝剥茧慢慢看代码。

  1. TextTreeConfiguration这个类没有方法,只有一些属性。点击此处,可以详细了解TextTreeConfiguration。

  2. _PrefixedStringBuilder这个类是一个前缀的字符串构造者。点击此处,可以详细了解_PrefixedStringBuilder

  3. TextTreeRenderer这个类是diagnostics的核心类之一,它实现了对节点(node)的属性和子孙的遍历过程。点击此处,可以详细了解TextTreeRenderer

  4. DiagnosticsNode这个类也是diagnostics的核心类之一,也是一个抽象类,它高度抽象除了节点本身,还有属性列表(properties)和子孙集合(children), 点击此处,可以详细了解DiagnosticsNode

  5. DiagnosticableNode这个是继承自DiagnosticsNode,实现很简单,在获取value的时候做了一个懒加载处理,此外简单实现了getChildren和getProperties两个方法

  6. DiagnosticableTreeNode这个类继承了DiagnosticableNode,这个类实现超级简单,只是重写了getChildren方法,就是在value不为null时,返回value.debugDescribeChildren()。

  7. DiagnosticPropertiesBuilder这个类很简单, 点击此处,可以详细了解DiagnosticPropertiesBuilder

  8. 整个flutter项目也没有地方用到,而且文档已经说明即将会被移除

  9. 这个是Diagnosticable,定义的也很基础,点击此处,可以详细了解Diagnosticable

  10. DiagnosticableTree和DiagnosticableTreeMixin实现基本是一样的,点击此处,可以详细了解DiagnosticableTree和DiagnosticableTreeMixin

  11. DiagnosticsBlock这个类的定义,从文档显示是因为DiagnosticsNode存在的意义通常是为缺乏有意义的值的展示提供容器,而DiagnosticsBlock通常是展示复杂的内嵌错误信息。这个目的是最重要的,其他的一些属性和方法和DiagnosticsNode相比没有什么不同。

  12. DiagnosticsSerializationDelegate和_DefaultDiagnosticsSerializationDelegate,_DefaultDiagnosticsSerializationDelegate实现了DiagnosticsSerializationDelegate,他们也相对比较独立,所以也放在一起说,点击此处,可以详细了解 DiagnosticsSerializationDelegate和_DefaultDiagnosticsSerializationDelegate

  13. DiagnosticsProperty这个类是继承DiagnosticsNode的,这个类是DiagnosticsNode抽象类在属性(property)方面的具体类,属性和方法上做了具体的一般实现,看源码也是一目了然的

  14. MessageProperty, StringProperty, _NumProperty, DoubleProperty, IntProperty, PercentProperty, FlagProperty, IterableProperty, ObjectFlagProperty和FlagsSummary,这些类很多,但是都是继承DiagnosticsProperty类的,其实每个实现就是做了一些个性化的实现,根据名字也很好知道是做什么的。

这篇文章就是解读foundation模块下最大的文件diagnostics.dart的内容的。如有不足之处,还望斧正。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。