trace static method
Enhanced trace with better formatting
Implementation
static void trace([String? message, String? tag]) {
if (!kDebugMode) return;
try {
final StackTrace stackTrace = StackTrace.current;
final List<String> lines = stackTrace.toString().split('\n');
String traceInfo = 'Unknown caller';
for (int i = 1; i < lines.length; i++) {
final String line = lines[i].trim();
if (!line.contains('dev_log.dart') &&
!line.contains('dart-sdk') &&
!line.contains('package:flutter/') &&
line.contains('.dart')) {
final RegExp regex = RegExp(r'([^/\\]+\.dart):(\d+):(\d+)\s+(.+)');
final Match? match = regex.firstMatch(line);
if (match != null) {
final String file = match.group(1) ?? '';
final String lineNum = match.group(2) ?? '';
final String method =
match.group(4)?.replaceAll(RegExp(r'[\[\]]'), '') ?? '';
traceInfo = '$file:$lineNum in $method';
}
break;
}
}
final String msg = message != null ? '$message - $traceInfo' : traceInfo;
_logWithStyle(msg, 'TRACE', tag);
} catch (e) {
_logWithStyle(message ?? 'trace()', 'TRACE', tag);
}
}