anchor.diff:      _pointTransformer = transformer;
     }
   
  -  int nextPointerId = 0;
     int downTimeMillis;
   
     void handlePointerDownEvent(PointerDownEvent event) {
  -    if (nextPointerId == 0) {
  +    if (pointerProperties.isEmpty) {
         downTimeMillis = event.timeStamp.inMilliseconds;
       }
  -    pointerProperties[event.pointer] = propertiesFor(event, nextPointerId++);
  +    int androidPointerId = 0;
  +    while (usedAndroidPointerIds.contains(androidPointerId)) {
  +      androidPointerId++;
  +    }
  +    usedAndroidPointerIds.add(androidPointerId);
  +    pointerProperties[event.pointer] = propertiesFor(event, androidPointerId);
     }
   
     void updatePointerPositions(PointerEvent event) {
  
positive.code:       <int, AndroidPointerCoords>{};
    final Map<int, AndroidPointerProperties> pointerProperties =
        <int, AndroidPointerProperties>{};
  
    Offset Function(Offset position) _pointTransformer;
  
  
negative.code: 
    void handlePointerUpEvent(PointerUpEvent event) {
      pointerPositions.remove(event.pointer);
      usedAndroidPointerIds.remove(pointerProperties[event.pointer].id);
      pointerProperties.remove(event.pointer);
      if (pointerProperties.isEmpty) {
        downTimeMillis = null;
      }
    }
  