import 'dart:async'; import 'package:flutter/material.dart'; import 'package:hiddify/features/window/notifier/window_notifier.dart'; import 'package:hiddify/utils/custom_loggers.dart'; import 'package:hiddify/utils/platform_utils.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:window_manager/window_manager.dart'; class WindowWrapper extends StatefulHookConsumerWidget { const WindowWrapper(this.child, {super.key}); final Widget child; @override ConsumerState createState() => _WindowWrapperState(); } class _WindowWrapperState extends ConsumerState with WindowListener, AppLogger { @override Widget build(BuildContext context) { ref.watch(windowNotifierProvider); return widget.child; } @override void initState() { super.initState(); windowManager.addListener(this); if (PlatformUtils.isDesktop) { WidgetsBinding.instance.addPostFrameCallback((_) async { await windowManager.setPreventClose(true); }); } } @override void dispose() { windowManager.removeListener(this); super.dispose(); } @override Future onWindowClose() async { await ref.read(windowNotifierProvider.notifier).close(); } @override void onWindowFocus() { setState(() {}); } }