[Bug] window_manager breaks AppLifecycleListener's onExitRequested
Having window_manager installed as a dependency breaks onExitRequested from Flutter's AppLifecycleListener.
Tested so far on Linux (Fedora 40 KDE, Wayland). Not sure of other platforms.
import 'dart:ui';
import 'package:flutter/material.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
final windowService = WindowService();
runApp(const MainApp());
}
class MainApp extends StatelessWidget {
const MainApp({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(
home: Scaffold(
body: Center(
child: Text('Hello World!'),
),
),
);
}
}
class WindowService {
late final AppLifecycleListener _appLifecycleListener;
WindowService() {
_appLifecycleListener = AppLifecycleListener(
onExitRequested: _handleExitRequest,
);
}
Future<AppExitResponse> _handleExitRequest() async {
print('Exit requested');
return AppExitResponse.cancel;
}
}
- Run the example, without
window_manageras a dependency - Try to close the window,
Exit requestedis printed instead of it closing (expected behaviour) - Add
window_manageras a dependency - Run the example again, and again try to close the window
- Instead of printing
Exit requested, the window closes with a messageLost connection to device.(unexpected behaviour)
I'm getting the same issue on Windows
+1 any workaround?
I did not realize it, but window_manager ended up giving me exactly what I need anyway, in the form of windowManager.setPreventClose(true). I used that instead of AppLifecycleListener.onExitRequested and it works very well.
Seems like onWindowClose isn't reliable, but if you check for eventName == 'close' in onWindowEvent along with setting setPreventClose(true), it works to manually handle closing the app as a workaround.