first commit
This commit is contained in:
68
lib/common/widgets/swipe_gesture.dart
Normal file
68
lib/common/widgets/swipe_gesture.dart
Normal file
@@ -0,0 +1,68 @@
|
||||
// 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,
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user