render method

  1. @override
String render()
override

Renders the component as a string.

Implementation

@override
String render() {
  Style style() => renderConfig.configureStyle(Style());

  final buffer = StringBuffer();

  // Exception header
  final exceptionType = exception.runtimeType.toString();
  final message = exception.toString();

  buffer.writeln();
  buffer.writeln(
    style().foreground(Colors.error).bold().render('  $exceptionType  '),
  );
  buffer.writeln();

  // Exception message
  final messageLines = message.split('\n');
  for (final line in messageLines) {
    buffer.writeln(
      '  ${style().foreground(Colors.warning).bold().render(line)}',
    );
  }

  // Stack trace
  if (stackTrace != null) {
    buffer.writeln();
    buffer.writeln(style().dim().render('  Stack trace:'));
    buffer.writeln();

    final frames = _parseStackTrace(stackTrace!);
    final displayFrames = frames.take(maxStackFrames).toList();

    for (var i = 0; i < displayFrames.length; i++) {
      final frame = displayFrames[i];
      final number = (i + 1).toString().padLeft(2);
      final location = showFullPaths
          ? frame.location
          : _shortenPath(frame.location);

      buffer.writeln(
        '  ${style().dim().render(number)}  ${style().foreground(Colors.info).bold().render(frame.member)}',
      );
      buffer.writeln('      ${style().dim().render(location)}');
    }

    if (frames.length > maxStackFrames) {
      final remaining = frames.length - maxStackFrames;
      buffer.writeln();
      buffer.writeln(
        style().dim().render('  ... and $remaining more frames'),
      );
    }
  }

  buffer.writeln();
  return buffer.toString();
}