createTextBinding method
Implementation
NodeReference createTextBinding(
ir.BindingSource text,
CompileElement parent,
int nodeIndex,
) {
final renderNode = _textNode(text, nodeIndex);
final parentNode = _getParentRenderNode(parent);
final isImmutable = text.isImmutable;
if (parentNode != o.nullExpr) {
if (isImmutable) {
// Phase 3 (SSR): Use RenderNode factory for SSR compatibility.
// We do not create a class-level member, effectively "one-time".
final createText =
o.importExpr(RenderNodeHelpers.createRenderText).callFn([
_textValue(text),
]);
_createMethod.addStmt(renderNode.toWriteStmt(createText));
// Use appendRenderChild helper for SSR compatibility
_createMethod.addStmt(o.importExpr(RenderNodeHelpers.appendRenderChild)
.callFn([parentNode, renderNode.toReadExpr()]).toStmt());
} else {
// A class-level member is created in a previous phase, and all we need
// to do is append it to its parent (and detectChanges will handle
// updating it).
_createMethod.addStmt(o.importExpr(RenderNodeHelpers.appendRenderChild)
.callFn([parentNode, renderNode.toReadExpr()]).toStmt());
}
} else if (isImmutable) {
// Phase 3 (SSR): Use RenderNode factory for SSR compatibility.
// Text is being appended or otherwise used somewhere else in the build
// (it does not start attached). Store it so initRootNode can use it.
final createText =
o.importExpr(RenderNodeHelpers.createRenderText).callFn([
_textValue(text),
]);
_createMethod.addStmt(renderNode.toWriteStmt(createText));
} else {
// A mutable string without being appended to anything.
// For example, text nodes that are attached to the root node use the
// initN(...) function to append themselves, and not ".append".
}
return renderNode;
}