Skip to content

Fling is not working while using the onPointerPanZoomUpdate callback #117881

@Yuvaraj-Gajaraj

Description

@Yuvaraj-Gajaraj

While using the onPointerPanZoomUpdate instead of the onPointerSignal event for trackpad zooming the fling effect is not working.

Steps to Reproduce

Run a below-shared code snippet as mentioned, while performing mouse wheel zooming in the trackpad using the onPointerSignal event it gives scrollDelta value after some time lifting the finger up on the trackpad but in onPointerPanZoomUpdate it is not working as same.

  • Run a sample in windows or macOS with the latest flutter SDK version (the fling effect is not working in onPointerPanZoomUpdate)
Code sample
import 'package: flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:vector_math/vector_math_64.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(),
      home: const ZoomableWidget(),
    );
  }
}

class ZoomableWidget extends StatefulWidget {
  const ZoomableWidget({Key? key}) : super(key: key);
  @override
  _ZoomableWidgetState createState() => _ZoomableWidgetState();
}

class _ZoomableWidgetState extends State<ZoomableWidget> {
  double _scale = 1.0;
  double _oldScale = 1.0;
  Matrix4? transform = Matrix4.diagonal3(
      Vector3(1.0.clamp(1.0, 5.0), 1.0.clamp(1.0, 5.0), 1.0.clamp(1.0, 5.0)));
  @override
  Widget build(BuildContext context) {
    return Listener(
      onPointerSignal: (PointerSignalEvent event) {
        if (event is PointerScrollEvent) {
          setState(() {
            _scale = _oldScale + (event.scrollDelta.dy / 180);
            print(_scale);
            _oldScale = _scale;
          });
        }
      },
      child: Transform(
        transform: //transform!,
            Matrix4.diagonal3(Vector3(_scale.clamp(1.0, 5.0),
                _scale.clamp(1.0, 5.0), _scale.clamp(1.0, 5.0))),
        alignment: FractionalOffset.center,
        child: const Image(image: AssetImage('images/owel.jpg')),
      ),
    );
  }
}
  • Sample with onPointerSignal event where filing effect is working.
Code sample
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:vector_math/vector_math_64.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(),
      home: const ZoomableWidget(),
    );
  }
}

class ZoomableWidget extends StatefulWidget {
  
  const ZoomableWidget({Key? key}) : super(key: key);
  @override
  _ZoomableWidgetState createState() => _ZoomableWidgetState();
}

class _ZoomableWidgetState extends State<ZoomableWidget> {
  double _scale = 1.0;
  double _oldScale = 1.0;
  Matrix4? transform = Matrix4.diagonal3(
      Vector3(1.0.clamp(1.0, 5.0), 1.0.clamp(1.0, 5.0), 1.0.clamp(1.0, 5.0)));
  @override
  Widget build(BuildContext context) {
    return Listener(
      onPointerPanZoomStart: (event) {
        print('start');
      },
      onPointerPanZoomUpdate: (PointerPanZoomUpdateEvent event) {
        event.position;
        setState(() {
          _scale = _oldScale + (event.panDelta.dy / 180);
          print(_scale);
          _oldScale = _scale;
        });
      },
      onPointerPanZoomEnd: (event) {
        print('end');
      },
      child: Transform(
        transform: //transform!,
            Matrix4.diagonal3(Vector3(_scale.clamp(1.0, 5.0),
                _scale.clamp(1.0, 5.0), _scale.clamp(1.0, 5.0))),
        alignment: FractionalOffset.center,
        child: const Image(image: AssetImage('images/owel.jpg')),
      ),
    );
  }
}

Expected results:
This is an onPointerSignal event and the expected output
ezgif com-gif-maker (19)

Actual results:
ezgif com-gif-maker (20)

Metadata

Metadata

Assignees

No one assigned

    Labels

    a: desktopRunning on desktopf: gesturesflutter/packages/flutter/gestures repository.found in release: 3.3Found to occur in 3.3found in release: 3.7Found to occur in 3.7frameworkflutter/packages/flutter repository. See also f: labels.has reproducible stepsThe issue has been confirmed reproducible and is ready to work on

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions