这个类是个抽象类,也是在diagnostic里最核心的一个类。
这个类的形参有5个,有一个参数name是必须设置的。
有5个属性有如下:
- name这个属性是String类型的,就是用来描述当前DiagnosticsNode的,通常显示在冒号之前2. showSeparator这个属性是bool类型的,就是为了控制是否显示name和description之间的冒号的
- showName这个属性也是bool类型的,为了控制是否显示name。当设置为false的是否,一般是值的说明会让人一目了然的情况
- linePrefix这个属性是String类型的,是每一行的前缀
- style这个属性是DiagnosticsTreeStyle枚举类型的,是当前的节点展示的样式选择
有8个get方法:
- level 这个返回值是DiagnosticLevel枚举类型,在release环境是DiagnosticLevel.hidden, 非release环境是DiagnosticLevel.info。
- emptyBodyDescription这个返回值是String类型,在没有任何的属性和子节点的情况下展示的说明
- value 这个返回值是Object类型, 是诊断数据的实际对象。
- allowWrap 这个返回值是Bool类型, 值是在多行的情况下是否允许换行
- allowNameWrap 这个返回值是Bool类型, 是否允许name的值换行
- allowTruncate 这个返回值是Bool类型, 在展示该节点和节点的是否是否允许被截断
- _separator 这个是内部的一个get方法,返回值是String类型,逻辑很简单是由showSeparator这个属性决定的
- textTreeConfiguration这个返回值是TextTreeConfiguration枚举类型,返回值会决定此对象是以怎样的文本格式呈现的。
有方法如下:
- toDescription这个方法有一个可选的参数,返回值是String类型,返回的是对该节点本身(不包含子节点和属性)的一个简要的概括,可以选择传入TextTreeConfiguration枚举类型的参数,是因为父节点的文本展示类型会影响返回值的展示。比如父节点的属性之间没有换行,那么如果当前是一个属性节点,就尽量只有一行值返回。
- isFiltered,这个方法会传染一个参数minLevel,是DiagnosticLevel枚举类型,如果是在非release环境下,如果当前的节点的level低于minLevel,返回值就是true,就代表会被过滤掉
- getProperties 这个方法就是获取当前节点的子属性,返回值是List<DiagnosticsNode> 类型
- getChildren 这个方法就是获取当前节点的子节点,返回值是List<DiagnosticsNode> 类型
- toJsonMap 这个方法也是我们常会写的,就是把当前对象转变成map类型。传入的是DiagnosticsSerializationDelegate类型的delegate,主要就是在转换的过程中增加输出一些自定义的信息,还有就是过滤子节点和属性列表。
- toJsonList 这个方法会传入是三个参数除了和上一条一样传入一个DiagnosticsSerializationDelegate类型的delegate,还有一个List<DiagnosticsNode> 类型的nodes, 还有就是一个DiagnosticsNode类型的parent。这个方法其实就是序列化nodes里的所有数据,通过的方式就是调用DiagnosticsSerializationDelegate里的truncateNodesList和delegateForNode方法,及上一条的toJsonList方法来实现的。
- toString这个方法会让当前的对象以String类型为返回值返回,如果当前的是style是DiagnosticsTreeStyle.singleLine的,调用下一条toStringDeep方法; 如果不是就调用toDescription方法。
- toStringDeep这个方法其实就是在非debug环境是直接返回空的,在debug环境会初始化一个TextTreeRenderer对象并调用render方法。
这是解读flutter foundation的diagnostic中的一篇,如有错漏之处,还望斧正。
网友评论