swipeGestureHelper static method

void swipeGestureHelper({
  1. required Widget? gesture,
  2. required String onType,
  3. Offset? offset,
  4. Duration? timestamp,
  5. Velocity? velocity,
})

Implementation

static void swipeGestureHelper(
    {required Widget? gesture,
    required String onType,
    Offset? offset,
    Duration? timestamp,
    Velocity? velocity}) async {
  if (gesture == null) {
    tlLogger.w('Warning: Gesture is null in swipeGestureHelper');
    return;
  }
  final int hashCode = gesture.hashCode;

  if (WidgetPath.containsKey(hashCode)) {
    final WidgetPath? wp = WidgetPath.getPath(hashCode);
    final BuildContext? context = wp!.context;
    final String gestureTarget = getGestureTarget(wp);

    tlLogger.v(
        '${onType.toUpperCase()}: Gesture widget, context hash: ${context.hashCode}, widget hash: $hashCode');
    tlLogger.v('--> Path: ${wp.widgetPath()}, digest: ${wp.widgetDigest()}');

    switch (onType) {
      case _onPanStart:
      case _onHorizontalDragStart:
      case _onVerticalDragStart:
        {
          final _Swipe swipe = _Swipe();
          swipe.startPosition = offset!;
          swipe.startTimeStamp = timestamp!;
          wp.addParameters(<String, dynamic>{'swipe': swipe});
          break;
        }
      case _onPanUpdate:
      case _onHorizontalDragUpdate:
      case _onVerticalDragUpdate:
        {
          if (wp.parameters.containsKey('swipe')) {
            final _Swipe swipe = wp.parameters['swipe'];
            swipe.updatePosition = offset!;
            swipe.updateTimestamp = timestamp!;
          }
          break;
        }
      case _onPanEnd:
      case _onHorizontalDragEnd:
      case _onVerticalDragEnd:
        {
          if (wp.parameters.containsKey('swipe')) {
            final _Swipe swipe = wp.parameters['swipe'];
            final String direction = swipe.calculateSwipe();
            if (direction.isNotEmpty) {
              final Offset start = swipe.getStartPosition!;
              final Offset end = swipe.getUpdatePosition!;
              final Map<String, dynamic> accessibility =
                  checkForSemantics(wp);

              wp.parameters.clear();
              tlLogger
                  .v('Swipe start: ${DateTime.now().millisecondsSinceEpoch}');
              await PluginTealeaf.onTlGestureEvent(
                  gesture: 'swipe',
                  id: wp.widgetPath(),
                  target: gestureTarget,
                  data: <String, dynamic>{
                    'pointer1': {
                      'dx': start.dx,
                      'dy': start.dy,
                      'ts': swipe.getStartTimestampString()
                    },
                    'pointer2': {
                      'dx': end.dx,
                      'dy': end.dy,
                      'ts': swipe.getUpdateTimestampString()
                    },
                    'velocity': {
                      'dx': velocity?.pixelsPerSecond.dx,
                      'dy': velocity?.pixelsPerSecond.dy
                    },
                    'direction': direction,
                    ...accessibility,
                  },
                  layoutParameters: _TlBinder.layoutParametersForGestures);
            }
          }
          break;
        }
      default:
        break;
    }
  } else {
    tlLogger.v(
        "ERROR: ${gesture.runtimeType.toString()} not found for hashcode: $hashCode");
  }
}