From 09920f9fb5def1fdfa01f79c7e137ebcc6187873 Mon Sep 17 00:00:00 2001 From: bggRGjQaUbCoE Date: Sun, 28 Sep 2025 14:59:34 +0800 Subject: [PATCH] mouse back Closes #1317 Signed-off-by: bggRGjQaUbCoE --- lib/common/widgets/mouse_back.dart | 27 +++++++++++++++++++++++++++ lib/main.dart | 10 +++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 lib/common/widgets/mouse_back.dart diff --git a/lib/common/widgets/mouse_back.dart b/lib/common/widgets/mouse_back.dart new file mode 100644 index 00000000..9db8621e --- /dev/null +++ b/lib/common/widgets/mouse_back.dart @@ -0,0 +1,27 @@ +import 'package:flutter/gestures.dart'; +import 'package:flutter/material.dart'; + +class MouseBackDetector extends StatelessWidget { + const MouseBackDetector({ + super.key, + required this.onTapDown, + required this.child, + }); + + final Widget child; + + final VoidCallback onTapDown; + + @override + Widget build(BuildContext context) { + return Listener( + onPointerDown: (event) { + if (event.buttons == kBackMouseButton) { + onTapDown(); + } + }, + behavior: HitTestBehavior.translucent, + child: child, + ); + } +} diff --git a/lib/main.dart b/lib/main.dart index 66c26647..88ba58cd 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -3,6 +3,7 @@ import 'dart:io'; import 'package:PiliPlus/build_config.dart'; import 'package:PiliPlus/common/constants.dart'; import 'package:PiliPlus/common/widgets/custom_toast.dart'; +import 'package:PiliPlus/common/widgets/mouse_back.dart'; import 'package:PiliPlus/http/init.dart'; import 'package:PiliPlus/models/common/theme/theme_color_type.dart'; import 'package:PiliPlus/router/app_pages.dart'; @@ -248,12 +249,19 @@ class MyApp extends StatelessWidget { toastBuilder: (String msg) => CustomToast(msg: msg), loadingBuilder: (msg) => LoadingWidget(msg: msg), builder: (context, child) { - return MediaQuery( + child = MediaQuery( data: MediaQuery.of(context).copyWith( textScaler: TextScaler.linear(Pref.defaultTextScale), ), child: child!, ); + if (Utils.isDesktop) { + return MouseBackDetector( + onTapDown: Get.back, + child: child, + ); + } + return child; }, ), navigatorObservers: [