Refactor desktop window management and tray
This commit is contained in:
54
lib/features/window/widget/window_wrapper.dart
Normal file
54
lib/features/window/widget/window_wrapper.dart
Normal file
@@ -0,0 +1,54 @@
|
||||
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<ConsumerStatefulWidget> createState() => _WindowWrapperState();
|
||||
}
|
||||
|
||||
class _WindowWrapperState extends ConsumerState<WindowWrapper>
|
||||
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<void> onWindowClose() async {
|
||||
await ref.read(windowNotifierProvider.notifier).close();
|
||||
}
|
||||
|
||||
@override
|
||||
void onWindowFocus() {
|
||||
setState(() {});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user