// Flutter imports: import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; /// /// Направления свайпов /// enum SwipeDirection { /// /// Свайп вниз /// DOWN, /// /// Свайп вверх /// UP, } class SwipeGesture extends StatelessWidget { /// /// Отслеживание свайпа по виджету /// const SwipeGesture({ required this.swipe, required this.onSwipe, required this.child, super.key, }); /// Направление движения final SwipeDirection swipe; /// Обработка свайпа final VoidCallback onSwipe; /// Потомок final Widget child; void _onVerticalDragUpdate(DragUpdateDetails e) { const int sensitivity = 3; switch (swipe) { case SwipeDirection.DOWN: if (e.delta.dy > sensitivity) { onSwipe(); } break; case SwipeDirection.UP: if (e.delta.dy < sensitivity) { onSwipe(); } break; } } @override Widget build(BuildContext context) { return GestureDetector( dragStartBehavior: DragStartBehavior.start, behavior: HitTestBehavior.opaque, onVerticalDragUpdate: _onVerticalDragUpdate, child: child, ); } }