feat: add tray icon to status bar

Signed-off-by: Kingtous <kingtous@qq.com>
This commit is contained in:
Kingtous
2022-06-02 16:23:20 +08:00
parent 1f9655d632
commit d81d785722
7 changed files with 92 additions and 14 deletions

View File

@@ -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(),
]),

View File

@@ -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();
}
}

View File

@@ -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(() {

View 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")
]);
}