patch function
Implementation
void patch(Node dom, Morphic prev, Morphic next) {
// Sanity check: Estos árboles deben estar resueltos
assert(
_isResolved(prev),
'prev tree contains unresolved Components. Call resolveNode() first.',
);
assert(
_isResolved(next),
'next tree contains unresolved Components. Call resolveNode() first.',
);
// Tipo distinto → reemplazo
if (prev.runtimeType != next.runtimeType) {
_replace(dom, createDom(next));
return;
}
// Text
if (prev is TextMorphic && next is TextMorphic) {
if (prev.value != next.value) {
(dom as Text).data = next.value;
}
return;
}
// Element
if (prev is ElementMorphic && next is ElementMorphic) {
if (prev.tag != next.tag) {
_replace(dom, createDom(next));
return;
}
final el = dom as Element;
_patchAttributes(el, prev, next);
// Cast children a List<Morphic> (safe porque está resuelto)
final prevChildren = prev.children.cast<Morphic>();
final nextChildren = next.children.cast<Morphic>();
_patchChildren(el, prevChildren, nextChildren);
}
}