devlog function

void devlog(
  1. dynamic msg, [
  2. int lv = 0
])

package中调试使用 lv>=99强制显示

Implementation

void devlog(dynamic msg, [int lv = 0]) {
  if (!kDebugMode) {
    return;
  }
  if (lv < 99 && lv < devlogLevel) return;
  final now = DateTime.now().toString();
  final time = now.substring(5, now.length > 23 ? 23 : now.length);
  String loc = '';
  try {
    final lines = StackTrace.current.toString().split('\n');
    if (lines.length > 1) {
      // 核心修改:不依赖 root,直接提取括号内的地址
      // 这里的正则取非括号内容,兼容 package:xxx 和 file:///xxx 两种情况
      final m = RegExp(r'\((.+?)\)').firstMatch(lines[1]);
      if (m != null) {
        // 既然是 devlog,保留 package: 前缀最通用;如果是本地 path 依赖产生的 file:///,可选去掉前缀
        loc = ' ${m.group(1)!.replaceFirst('file:///', '')}';
      }
    }
  } catch (_) {}
  debugPrint('\x1B[90m[$time]\x1B[0m\x1B[94m$loc\x1B[0m $msg');
}