Improved page switching via keyboard. Close #293

This commit is contained in:
2025-03-25 16:36:08 +08:00
parent 51739355c8
commit 1103076009

View File

@@ -298,6 +298,8 @@ class _GalleryModeState extends State<_GalleryMode>
photoViewController.animateScale?.call(target); photoViewController.animateScale?.call(target);
} }
Timer? keyRepeatTimer;
@override @override
void handleKeyEvent(KeyEvent event) { void handleKeyEvent(KeyEvent event) {
bool? forward; bool? forward;
@@ -320,7 +322,11 @@ class _GalleryModeState extends State<_GalleryMode>
event.logicalKey == LogicalKeyboardKey.arrowRight) { event.logicalKey == LogicalKeyboardKey.arrowRight) {
forward = false; forward = false;
} }
if (event is KeyDownEvent || event is KeyRepeatEvent) { if (event is KeyDownEvent) {
if (keyRepeatTimer != null) {
keyRepeatTimer!.cancel();
keyRepeatTimer = null;
}
if (forward == true) { if (forward == true) {
controller.nextPage( controller.nextPage(
duration: const Duration(milliseconds: 200), duration: const Duration(milliseconds: 200),
@@ -333,6 +339,31 @@ class _GalleryModeState extends State<_GalleryMode>
); );
} }
} }
if (event is KeyRepeatEvent && keyRepeatTimer == null) {
keyRepeatTimer = Timer.periodic(
const Duration(milliseconds: 100),
(timer) {
if (!mounted) {
timer.cancel();
return;
} else if (forward == true) {
controller.nextPage(
duration: const Duration(milliseconds: 100),
curve: Curves.ease,
);
} else if (forward == false) {
controller.previousPage(
duration: const Duration(milliseconds: 100),
curve: Curves.ease,
);
}
},
);
}
if (event is KeyUpEvent && keyRepeatTimer != null) {
keyRepeatTimer!.cancel();
keyRepeatTimer = null;
}
} }
@override @override