[ad_1]
I am engaged on a launcher app with gestures settings and I am searching for a technique to obtain two-finger swipe up and down gestures, i discovered that it may be achieved by utilizing RawGestureDetector and MultiDragGestureRecognizer
i attempted this code pattern beneath however it does not appear to work , anybody have any concept the right way to obtain this ?
import 'package deal:flutter/gestures.dart';
import 'package deal:flutter/materials.dart';
class TwoFingerPointerWidget extends StatelessWidget {
last Widget baby;
last OnUpdate onUpdate;
TwoFingerPointerWidget({required this.baby, required this.onUpdate});
@override
Widget construct(BuildContext context) {
return RawGestureDetector(
gestures: <Kind, GestureRecognizerFactory>{
CustomVerticalMultiDragGestureRecognizer:
GestureRecognizerFactoryWithHandlers<
CustomVerticalMultiDragGestureRecognizer>(
() => CustomVerticalMultiDragGestureRecognizer(debugOwner: null),
(CustomVerticalMultiDragGestureRecognizer occasion) {
occasion.onStart = (Offset place) {
return CustomDrag(occasions: occasion.occasions, onUpdate: onUpdate);
};
},
),
},
baby: baby,
);
}
}
typedef OnUpdate(DragUpdateDetails particulars);
class CustomDrag extends Drag {
last Checklist<PointerDownEvent> occasions;
last OnUpdate onUpdate;
CustomDrag({required this.occasions, required this.onUpdate});
@override
void replace(DragUpdateDetails particulars) {
tremendous.replace(particulars);
last delta = particulars.delta;
if (delta.dy.abs() > 0 && occasions.size == 2) {
onUpdate.name(DragUpdateDetails(
sourceTimeStamp: particulars.sourceTimeStamp,
delta: Offset(0, delta.dy),
primaryDelta: particulars.primaryDelta,
globalPosition: particulars.globalPosition,
localPosition: particulars.localPosition,
));
}
}
@override
void finish(DragEndDetails particulars) {
tremendous.finish(particulars);
}
}
class CustomVerticalMultiDragGestureRecognizer
extends MultiDragGestureRecognizer {
last Checklist<PointerDownEvent> occasions = [];
CustomVerticalMultiDragGestureRecognizer({required Object? debugOwner})
: tremendous(debugOwner: debugOwner);
@override
createNewPointerState(PointerDownEvent occasion) {
occasions.add(occasion);
return _CustomVerticalPointerState(occasion.place, onDisposeState: () {
occasions.take away(occasion);
});
}
@override
String get debugDescription => 'customized vertical multidrag';
}
typedef OnDisposeState();
class _CustomVerticalPointerState extends MultiDragPointerState {
last OnDisposeState onDisposeState;
_CustomVerticalPointerState(Offset initialPosition,
{required this.onDisposeState})
: tremendous(initialPosition, PointerDeviceKind.contact, null);
@override
void checkForResolutionAfterMove() {
if (pendingDelta!.dy.abs() > kTouchSlop) {
resolve(GestureDisposition.accepted);
}
}
@override
void accepted(GestureMultiDragStartCallback starter) {
starter(initialPosition);
}
@override
void dispose() {
onDisposeState.name();
tremendous.dispose();
}
}
[ad_2]
