anchor.diff:  
   class _GridPhotoViewerState extends State<GridPhotoViewer> with SingleTickerProviderStateMixin {
     AnimationController _controller;
  -  double _lastScale = 1.0;
  +  Animation<Offset> _flingAnimation;
  +  Offset _offset = Offset.zero;
     double _scale = 1.0;
  -  Point _lastFocalPoint = Point.origin;
  -  Point _focalPoint = Point.origin;
  -  Animation<Point> _flingAnimation;
  +  Offset _normalizedOffset;
  +  double _previousScale;
   
     @override
     void initState() {
  
positive.code:       return;
      final Offset direction = details.velocity.pixelsPerSecond / magnitude;
      final double distance = (Point.origin & context.size).shortestSide;
      _flingAnimation = new Tween<Point>(
        begin: _focalPoint,
        end: _clampFocalPoint(_focalPoint + direction * -distance)
      ).animate(_controller);
      _controller
        ..value = 0.0
  
negative.code:           onScaleEnd: _handleOnScaleEnd,
            child: new Transform(
              transform: new Matrix4.identity()
                ..translate(_offset.dx, _offset.dy)
                ..scale(_scale),
              child: new ClipRect(
                child: new Image.asset(config.photo.assetName, fit: ImageFit.cover)
  