createTextStory method
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)],
),
],
);
}