renderSequenceDiagram function

String renderSequenceDiagram(
  1. String content, {
  2. SequenceDiagramOptions? options,
  3. SequenceDiagramTheme? theme,
  4. int? maxWidth,
})

Convenience: renders a Mermaid sequence diagram string to text.

Implementation

String renderSequenceDiagram(
  String content, {
  SequenceDiagramOptions? options,
  SequenceDiagramTheme? theme,
  int? maxWidth,
}) {
  final diagram = parseSequenceDiagram(content);
  if (diagram == null || diagram.participants.isEmpty) return '';

  SequenceDiagram renderedDiagram = diagram;
  SequenceDiagramOptions? layoutOptions = options;
  if (maxWidth != null) {
    final fitWidth = math.max(1, maxWidth);
    layoutOptions = SequenceDiagramOptions(
      minParticipantGap: options?.minParticipantGap ?? 1,
    );
    renderedDiagram = _fitSequenceDiagramToWidth(
      diagram,
      fitWidth,
      layoutOptions,
    );
    final layout = layoutSequenceDiagram(
      renderedDiagram,
      options: layoutOptions,
    );
    if (layout.width <= maxWidth) {
      _checkSequenceCanvasSize(layout.width, layout.height);
      final canvas = Canvas(layout.width, layout.height);
      try {
        drawSequenceDiagram(
          canvas,
          rect(0, 0, layout.width, layout.height),
          renderedDiagram,
          theme: theme ?? SequenceDiagramTheme.defaultTheme,
          options: layoutOptions,
        );
        return canvas.render();
      } finally {
        canvas.dispose();
      }
    }
    return _sequenceDiagnostic(
      'sequence diagram needs ${layout.width} columns; available $maxWidth',
      maxWidth,
    );
  }
  final layout = layoutSequenceDiagram(renderedDiagram, options: layoutOptions);
  _checkSequenceCanvasSize(layout.width, layout.height);
  final canvas = Canvas(layout.width, layout.height);
  try {
    final resolvedTheme = theme ?? SequenceDiagramTheme.defaultTheme;
    drawSequenceDiagram(
      canvas,
      rect(0, 0, layout.width, layout.height),
      renderedDiagram,
      theme: resolvedTheme,
      options: layoutOptions,
    );
    return canvas.render();
  } finally {
    canvas.dispose();
  }
}