render method
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();
}