anchor.diff:        return null;
       }
   
  -    if (oldNode != null && node._key == oldNode._key && node._retainStatefulNodeIfPossible(oldNode)) {
  +    if (oldNode != null && oldNode.runtimeType == node.runtimeType && node.key == oldNode.key && node._retainStatefulNodeIfPossible(oldNode)) {
         assert(oldNode.mounted);
         assert(!node.mounted);
         oldNode._sync(node, slot);
  
positive.code:       currentNode = children[endIndex - 1];
        oldNode = oldChildren[oldEndIndex - 1];
  
        if (currentNode._key != oldNode._key) {
          break;
        }
  
  
negative.code: abstract class Widget {
  
    Widget({ String key }) {
      _key = key != null ? key : runtimeType.toString();
      assert(this is AbstractWidgetRoot || _inRenderDirtyComponents); // you should not build the UI tree ahead of time, build it only during build()
    }
  
  