Fix the double escape bug

This commit is contained in:
2025-04-21 22:42:44 +02:00
parent 173c4fbee2
commit 1051805463

View File

@@ -38,6 +38,9 @@ void main() async {
class JournalerApp extends StatelessWidget {
const JournalerApp({super.key});
static final GlobalKey<MainPageState> _mainPageKey =
GlobalKey<MainPageState>();
static final TextTheme _baseTextTheme = const TextTheme(
bodyMedium: TextStyle(fontSize: 24),
);
@@ -111,7 +114,30 @@ class JournalerApp extends StatelessWidget {
theme: lightTheme,
darkTheme: darkTheme,
themeMode: ThemeMode.system,
home: const MainPage(),
home: Focus(
// Using RawKeyboardListener despite deprecation because KeyboardListener
// and Shortcuts/Actions didn't reliably capture the Escape key press
// before the TextField handled it for unfocusing, requiring two presses.
// RawKeyboardListener intercepts the event earlier.
child: RawKeyboardListener(
// Revert to RawKeyboardListener
focusNode: FocusNode(),
onKey: (RawKeyEvent event) {
// Revert to onKey and RawKeyEvent
if (event is RawKeyDownEvent && // Revert to RawKeyDownEvent
event.logicalKey == LogicalKeyboardKey.escape) {
debugPrint("Escape pressed (RawKeyboardListener - Workaround)");
final state = _mainPageKey.currentState;
if (state != null) {
// Re-add unfocus, as it seemed necessary with Raw listener
FocusManager.instance.primaryFocus?.unfocus();
state.onWindowClose();
}
}
},
child: MainPage(key: _mainPageKey),
),
),
debugShowCheckedModeBanner: false,
);
}
@@ -121,10 +147,10 @@ class MainPage extends StatefulWidget {
const MainPage({super.key});
@override
State<MainPage> createState() => _MainPageState();
State<MainPage> createState() => MainPageState();
}
class _MainPageState extends State<MainPage> with WindowListener {
class MainPageState extends State<MainPage> with WindowListener {
final SystemTray _systemTray = SystemTray();
final Menu _menu = Menu();
final AudioPlayer _audioPlayer = AudioPlayer();
@@ -260,17 +286,7 @@ class _MainPageState extends State<MainPage> with WindowListener {
@override
Widget build(BuildContext context) {
return KeyboardListener(
focusNode: FocusNode(),
autofocus: true,
onKeyEvent: (event) {
if (event is KeyDownEvent &&
event.logicalKey == LogicalKeyboardKey.escape) {
debugPrint("Escape key pressed - hiding window.");
onWindowClose();
}
},
child: Scaffold(
return Scaffold(
appBar: AppBar(title: const Text('Journaler'), actions: const []),
body: Padding(
padding: const EdgeInsets.all(8.0),
@@ -332,7 +348,8 @@ class _MainPageState extends State<MainPage> with WindowListener {
],
),
),
),
);
}
}
// --- End Actions and Shortcuts ---