UME: logger功能
功能查看
今天我们看下logger功能是如何实现的, 老规矩先来看看功能是什么样的,当我们点击debugprint时,下方会打印出我们打印的信息
代码查看
今天的代码在flutter_ume_kit_console包中,这里做了个方法交换,将debugPrint方法赋值给了_originalDebugPrint
,然后重新写了一个debugPrint,在新的debugPrint中将message添加到stream中,然后在调用_originalDebugPrint
static redirectDebugPrint() {
if (_originalDebugPrint != null) return;
_originalDebugPrint = debugPrint;
debugPrint = (String? message, {int? wrapWidth}) {
ConsoleManager.streamController!.sink.add(message);
if (_originalDebugPrint != null) {
_originalDebugPrint!(message, wrapWidth: wrapWidth);
}
};
}
再来看下流中做了什么,在流中判断如果data没超过最大条数就添加进去,超过了就删除最后一条,这样我们就得到了所有,打印的数据,
_logStreamController!.stream.transform(transformer).listen((value) {
if (_logData.length < maxLine) {
_logData.addFirst(value);
} else {
_logData.removeLast();
}
});
流数据
value = [2021-11-09 20:21:48.215855, statement]
item1 = 2021-11-09 20:21:48.215855
item2 =statement
现在我们回到console_panel.dart中看看data如何显示出来的,通过富文本展示时间和打印数据
RichText(
text: TextSpan(children: [
TextSpan(
text: _dateTimeString(index),
style: TextStyle(
color: Colors.white60,
fontFamily: 'Courier',
fontSize: 16,
fontWeight: FontWeight.w400,
)),
TextSpan(
text:
'${_logList[_logList.length - index - 1].item2}',
style: TextStyle(
color: Colors.white,
fontFamily: 'Courier',
fontSize: 16,
fontWeight: FontWeight.w400,
)),
]),
)
至于多种样式的时间格式显示,则是写了一个枚举进行判断当前是哪种格式的时间,进行返回要显示的格式,代码就不展示了
该工具只能通过debugPrint进行打印,不能使用print,因为是对debugPrint进行插桩,所以只能记录debugPrint的数据
另外看了一下debugPrint,可以自定义打印信息,而print则不能自定义打印信息,之后如果有时间的话会写个打印输出的小工具,敬请期待,嘿嘿
结语
好了今天的源码查看就到这了, 作为Flutter届的一个小学生,希望大家多多指教,有问题的地方一起讨论
转载自:https://juejin.cn/post/7028549745454874638