anchor.diff:    void handlePointerCancelEvent(PointerCancelEvent event) {
       pointerPositions.clear();
       pointerProperties.clear();
  -    nextPointerId = 0;
  +    usedAndroidPointerIds.clear();
       downTimeMillis = null;
     }
   
  
positive.code: 
    void handlePointerUpEvent(PointerUpEvent event) {
      pointerPositions.remove(event.pointer);
      pointerProperties.remove(event.pointer);
      if (pointerProperties.isEmpty) {
        nextPointerId = 0;
        downTimeMillis = null;
      }
    }
  
negative.code:     _pointTransformer = transformer;
    }
  
    int downTimeMillis;
  
    void handlePointerDownEvent(PointerDownEvent event) {
      if (pointerProperties.isEmpty) {
        downTimeMillis = event.timeStamp.inMilliseconds;
      }
      int androidPointerId = 0;
      while (usedAndroidPointerIds.contains(androidPointerId)) {
        androidPointerId++;
      }
      usedAndroidPointerIds.add(androidPointerId);
      pointerProperties[event.pointer] = propertiesFor(event, androidPointerId);
    }
  
    void updatePointerPositions(PointerEvent event) {
  