swipeGestureHelper static method
void
swipeGestureHelper({})
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");
}
}