parseBBCode function

List<InlineSpan> parseBBCode(
  1. String data, {
  2. BBStylesheet? stylesheet,
  3. dynamic onError(
    1. Object error,
    2. StackTrace? stackTrace
    )?,
})

Parses BBCode InlineSpan elements. These elements can then be used in a RichText widget.

The stylesheet is used for parsing. If none is provided defaultBBStylesheet will be used instead. Additionally an onError method is available for advanced error handling.

Implementation

List<InlineSpan> parseBBCode(
  String data, {
  BBStylesheet? stylesheet,
  Function(Object error, StackTrace? stackTrace)? onError,
}) {
  // Set default style
  stylesheet ??= defaultBBStylesheet();

  // Use the parser to parse into nodes.
  bbob.ParseErrorMessage? errorObject;
  final nodes =
      bbob.parse(data, validTags: stylesheet.validTags, onError: (parseError) {
    errorObject = parseError;
  });

  if (errorObject != null) {
    onError?.call(errorObject!, StackTrace.current);
    return [];
  }

  // Use the FlutterRenderer to convert the nodes into
  // InlineSpan widgets.
  FlutterRenderer renderer = FlutterRenderer(stylesheet: stylesheet);

  late List<InlineSpan> spans;
  try {
    spans = renderer.render(nodes);
  } catch (error, stack) {
    onError?.call(error, stack);
    return [];
  }

  // Return the inline spans.
  return spans;
}