patch function
Implementation
void patch(Node dom, Morphic prev, Morphic next) {
assert(
_isResolved(prev),
'prev tree contains unresolved Components. Call resolveNode() first.',
);
assert(
_isResolved(next),
'next tree contains unresolved Components. Call resolveNode() first.',
);
if (prev.runtimeType != next.runtimeType) {
_replace(dom, createDom(next));
return;
}
if (prev is TextMorphic && next is TextMorphic) {
if (prev.value != next.value) {
(dom as Text).data = next.value;
}
return;
}
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);
final prevChildren = prev.children.cast<Morphic>();
final nextChildren = next.children.cast<Morphic>();
_patchChildren(el, prevChildren, nextChildren);
}
}