mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-04-16 10:21:27 +03:00
feat: add tray icon to status bar
Signed-off-by: Kingtous <kingtous@qq.com>
This commit is contained in:
@@ -52,12 +52,7 @@ class _ConnectionPageState extends State<ConnectionPage> {
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
getUpdateUI(),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
getSearchBarUI(),
|
||||
],
|
||||
),
|
||||
getSearchBarUI(),
|
||||
SizedBox(height: 12),
|
||||
getPeers(),
|
||||
]),
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:flutter/material.dart' hide MenuItem;
|
||||
import 'package:flutter_hbb/common.dart';
|
||||
import 'package:flutter_hbb/desktop/pages/connection_page.dart';
|
||||
import 'package:flutter_hbb/desktop/widgets/titlebar_widget.dart';
|
||||
import 'package:flutter_hbb/models/model.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:tray_manager/tray_manager.dart';
|
||||
import 'package:window_manager/window_manager.dart';
|
||||
|
||||
class DesktopHomePage extends StatefulWidget {
|
||||
DesktopHomePage({Key? key}) : super(key: key);
|
||||
@@ -14,7 +18,7 @@ class DesktopHomePage extends StatefulWidget {
|
||||
|
||||
const borderColor = Color(0xFF2F65BA);
|
||||
|
||||
class _DesktopHomePageState extends State<DesktopHomePage> {
|
||||
class _DesktopHomePageState extends State<DesktopHomePage> with TrayListener {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
@@ -203,4 +207,30 @@ class _DesktopHomePageState extends State<DesktopHomePage> {
|
||||
buildRecentSession(BuildContext context) {
|
||||
return Center(child: Text("waiting implementation"));
|
||||
}
|
||||
|
||||
@override
|
||||
void onTrayMenuItemClick(MenuItem menuItem) {
|
||||
print("click ${menuItem.key}");
|
||||
switch (menuItem.key) {
|
||||
case "quit":
|
||||
exit(0);
|
||||
case "show":
|
||||
windowManager.show();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
trayManager.addListener(this);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
trayManager.removeListener(this);
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_hbb/desktop/pages/desktop_home_page.dart';
|
||||
import 'package:flutter_hbb/desktop/screen/desktop_remote_screen.dart';
|
||||
import 'package:flutter_hbb/utils/multi_window_manager.dart';
|
||||
import 'package:flutter_hbb/utils/tray_manager.dart';
|
||||
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:window_manager/window_manager.dart';
|
||||
@@ -52,6 +53,7 @@ void runRustDeskApp(List<String> args) async {
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
initTray();
|
||||
FFI.serverModel.startService();
|
||||
runApp(App());
|
||||
doWhenWindowReady(() {
|
||||
|
||||
22
flutter/lib/utils/tray_manager.dart
Normal file
22
flutter/lib/utils/tray_manager.dart
Normal file
@@ -0,0 +1,22 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:flutter_hbb/models/model.dart';
|
||||
import 'package:tray_manager/tray_manager.dart';
|
||||
|
||||
Future<void> initTray({List<MenuItem>? extra_item}) async {
|
||||
List<MenuItem> items = [
|
||||
MenuItem(key: "show", label: translate("show rustdesk")),
|
||||
MenuItem.separator(),
|
||||
MenuItem(key: "quit", label: translate("quit rustdesk")),
|
||||
];
|
||||
if (extra_item != null) {
|
||||
items.insertAll(0, extra_item);
|
||||
}
|
||||
await Future.wait([
|
||||
trayManager
|
||||
.setIcon(Platform.isWindows ? "assets/logo.ico" : "assets/logo.png"),
|
||||
trayManager.setContextMenu(Menu(items: items)),
|
||||
trayManager.setToolTip("rustdesk"),
|
||||
trayManager.setTitle("rustdesk")
|
||||
]);
|
||||
}
|
||||
Reference in New Issue
Block a user