fix MouseBackDetector

This commit is contained in:
nyne
2024-10-30 22:32:56 +08:00
parent 1883c3ee5b
commit a09fb0e81c
2 changed files with 7 additions and 48 deletions

View File

@@ -1,58 +1,19 @@
part of 'components.dart';
class MouseBackRecognizer extends BaseTapGestureRecognizer {
GestureTapDownCallback? onTapDown;
MouseBackRecognizer({
super.debugOwner,
super.supportedDevices,
super.allowedButtonsFilter,
});
@override
void handleTapCancel({
required PointerDownEvent down,
PointerCancelEvent? cancel,
required String reason,
}) {}
@override
void handleTapDown({required PointerDownEvent down}) {
final TapDownDetails details = TapDownDetails(
globalPosition: down.position,
localPosition: down.localPosition,
kind: getKindForPointer(down.pointer),
);
if (down.buttons == kBackMouseButton && onTapDown != null) {
invokeCallback<void>('onTapDown', () => onTapDown!(details));
}
}
@override
void handleTapUp({
required PointerDownEvent down,
required PointerUpEvent up,
}) {}
}
class MouseBackDetector extends StatelessWidget {
const MouseBackDetector({super.key, required this.onTapDown, required this.child});
final Widget child;
final GestureTapDownCallback onTapDown;
final void Function() onTapDown;
@override
Widget build(BuildContext context) {
return RawGestureDetector(
gestures: <Type, GestureRecognizerFactory>{
MouseBackRecognizer: GestureRecognizerFactoryWithHandlers<MouseBackRecognizer>(
() => MouseBackRecognizer(),
(MouseBackRecognizer instance) {
instance.onTapDown = onTapDown;
},
),
return Listener(
onPointerDown: (event) {
if (event.buttons == kBackMouseButton) {
onTapDown();
}
},
behavior: HitTestBehavior.translucent,
child: child,

View File

@@ -150,9 +150,7 @@ class _MyAppState extends State<MyApp> {
),
},
child: MouseBackDetector(
onTapDown: (event) {
App.pop();
},
onTapDown: App.pop,
child: WindowFrame(widget),
),
);