anchor.diff:            assert(newNode.isFromOldGeneration);
             assert(oldNode.isFromOldGeneration);
             assert(Widget._canSync(newNode, oldNode));
  -          if (oldNode.retainStatefulNodeIfPossible(newNode)) {
  +          if (oldNode == newNode) {
  +            newNode.setParent(this);
  +            newNode._markAsFromCurrentGeneration();
  +            return newNode;
  +          } else if (oldNode.retainStatefulNodeIfPossible(newNode)) {
               assert(oldNode.mounted);
               assert(!newNode.mounted);
               oldNode.setParent(this);
  
positive.code:       childrenTop -= 1;
        Widget oldChild = oldChildren[childrenTop];
        assert(oldChild.mounted);
        assert(oldChild.isFromOldGeneration);
        Widget newChild = newChildren[childrenTop];
        assert(newChild.isFromOldGeneration);
        assert(Widget._canSync(oldChild, newChild));
        newChild = syncChild(newChild, oldChild, nextSibling);
        assert(newChild.mounted);
  
negative.code:       nextSibling = newChild;
      }
  
      // clean up any of the remaining middle nodes from the old list
      if (haveOldNodes && !oldKeyedChildren.isEmpty) {
        for (Widget oldChild in oldKeyedChildren.values)
          if (oldChild.isFromOldGeneration)
  