trace static method

void trace([
  1. String? message,
  2. String? tag
])

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);
  }
}