localsend--localsend
63 行
1.4 KiB
Dart
63 行
1.4 KiB
Dart
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<TrayWatcher> createState() => _TrayWatcherState();
|
|
}
|
|
|
|
class _TrayWatcherState extends State<TrayWatcher> 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:
|
|
}
|
|
}
|
|
}
|