import 'dart:io'; import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; import 'package:localsend_app/util/native/platform_check.dart'; import 'package:localsend_app/util/native/tray_helper.dart'; import 'package:tray_manager/tray_manager.dart'; class TrayWatcher extends StatefulWidget { final Widget child; const TrayWatcher({required this.child, super.key}); @override State createState() => _TrayWatcherState(); } class _TrayWatcherState extends State with TrayListener { @override Widget build(BuildContext context) { return widget.child; } @override void initState() { super.initState(); trayManager.addListener(this); } @override void dispose() { trayManager.removeListener(this); super.dispose(); } @override void onTrayIconMouseDown() async { if (checkPlatform([TargetPlatform.macOS])) { await trayManager.popUpContextMenu(); } else { await showFromTray(); } } @override void onTrayIconRightMouseDown() async { await trayManager.popUpContextMenu(); } @override void onTrayMenuItemClick(MenuItem menuItem) async { final entry = TrayEntry.values.firstWhereOrNull((e) => e.name == menuItem.key); switch (entry) { case TrayEntry.open: await showFromTray(); break; case TrayEntry.close: exit(0); default: } } }