This commit is contained in:
2025-09-04 22:10:00 +08:00
parent c527b5e67c
commit 3b375abc09
18 changed files with 150 additions and 6 deletions

View File

@@ -10,7 +10,7 @@ import 'package:island/pods/config.dart';
import 'package:island/pods/network.dart';
import 'package:island/screens/account/me/account_settings.dart';
import 'package:island/screens/auth/oidc.native.dart';
import 'package:island/services/text.dart';
import 'package:island/utils/text.dart';
import 'package:island/services/time.dart';
import 'package:island/widgets/alert.dart';
import 'package:island/widgets/content/sheet.dart';

View File

@@ -17,7 +17,7 @@ import 'package:island/pods/network.dart';
import 'package:island/pods/userinfo.dart';
import 'package:island/services/color.dart';
import 'package:island/services/responsive.dart';
import 'package:island/services/text.dart';
import 'package:island/utils/text.dart';
import 'package:island/services/time.dart';
import 'package:island/services/timezone/native.dart';
import 'package:island/widgets/account/account_name.dart';

View File

@@ -11,7 +11,7 @@ import 'package:island/models/publisher.dart';
import 'package:island/pods/network.dart';
import 'package:island/screens/creators/publishers.dart';
import 'package:island/services/responsive.dart';
import 'package:island/services/text.dart';
import 'package:island/utils/text.dart';
import 'package:island/widgets/account/account_picker.dart';
import 'package:island/widgets/alert.dart';
import 'package:island/widgets/app_scaffold.dart';

View File

@@ -0,0 +1,58 @@
import 'dart:io';
import 'package:bitsdojo_window/bitsdojo_window.dart';
import 'package:flutter/foundation.dart';
import 'package:tray_manager/tray_manager.dart';
class TrayService {
TrayService._();
static final TrayService _instance = TrayService._();
static TrayService get instance => _instance;
bool _checkPlatformAvalability() {
if (kIsWeb) return false;
if (Platform.isAndroid || Platform.isIOS) return false;
return true;
}
Future<void> initialize(TrayListener listener) async {
if (!_checkPlatformAvalability()) return;
await trayManager.setIcon(
Platform.isWindows
? 'assets/icons/icon.ico'
: 'assets/icons/icon-outline.svg',
);
final menu = Menu(
items: [
MenuItem(key: 'show_window', label: 'Show Window'),
MenuItem.separator(),
MenuItem(key: 'exit_app', label: 'Exit App'),
],
);
await trayManager.setContextMenu(menu);
trayManager.addListener(listener);
}
Future<void> dispose(TrayListener listener) async {
if (!_checkPlatformAvalability()) return;
trayManager.removeListener(listener);
await trayManager.destroy();
}
void handleAction(MenuItem item) {
switch (item.key) {
case 'show_window':
appWindow.show();
break;
case 'exit_app':
appWindow.close();
break;
}
}
}