createTextStory method

TextStory? createTextStory(
  1. String elementId
)

Materializes authored text using this definition's declared slots. Existing stories are never reset when definitions change.

Implementation

TextStory? createTextStory(String elementId) {
  if (!hostsText) return null;
  final contentLayers = expandedLayers
      .whereType<ShapeContentLayerDefinition>()
      .toList();
  final slots = <String, ShapeTextLayerDefinition>{};
  for (final layer in expandedLayers.whereType<ShapeTextLayerDefinition>()) {
    slots.putIfAbsent(layer.slotId, () => layer);
  }
  return TextStory(
    id: '$elementId-story',
    contents: [
      for (final layer in contentLayers)
        if (layer.createContent(elementId) case final content?)
          _validateCreatedContent(layer, content),
    ],
    blocks: [
      for (final layer in slots.values)
        TextParagraph(
          id: '$elementId-${layer.slotId}',
          role: layer.role,
          slotId: layer.slotId,
          alignment: layer.initialAlignment,
          runs: [TextRun(layer.initialText)],
        ),
    ],
  );
}