美文网首页
flutter foundation的diagnostics

flutter foundation的diagnostics

作者: 一叠纸船 | 来源:发表于2020-09-11 17:54 被阅读0次

    这个文件有近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的内容的。如有不足之处,还望斧正。

    相关文章

      网友评论

          本文标题:flutter foundation的diagnostics

          本文链接:https://www.haomeiwen.com/subject/xbmvektx.html