truncateStackTrace function

StackTrace? truncateStackTrace(
  1. StackTrace? stackTrace, {
  2. int maxFrames = kDefaultStackFrameLimit,
})

Truncates stackTrace to maxFrames frames while keeping it a proper StackTrace so that tools like Flutter DevTools can still parse and display clickable frame links.

Returns the original object when it is already within the limit, so no allocation occurs in the common case.

Implementation

StackTrace? truncateStackTrace(
  StackTrace? stackTrace, {
  int maxFrames = kDefaultStackFrameLimit,
}) {
  if (stackTrace == null) return null;
  final lines = stackTrace
      .toString()
      .split('\n')
      .where((l) => l.isNotEmpty)
      .toList(growable: false);
  if (lines.length <= maxFrames) return stackTrace;
  final truncated = [
    ...lines.take(maxFrames),
    '... (${lines.length - maxFrames} more frames)',
  ].join('\n');
  return StackTrace.fromString(truncated);
}