0 purchases
system tray
system_tray #
A Flutter package that enables support for system tray menu for desktop flutter apps. on Windows, macOS, and Linux.
Install #
In the pubspec.yaml of your flutter project, add the following dependency:
dependencies:
...
system_tray: ^2.0.3
copied to clipboard
In your library add the following import:
import 'package:system_tray/system_tray.dart';
copied to clipboard
Prerequisite #
Linux #
sudo apt-get install appindicator3-0.1 libappindicator3-dev
copied to clipboard
or
// For Ubuntu 22.04 or greater
sudo apt-get install libayatana-appindicator3-dev
copied to clipboard
Example App #
Windows #
macOS #
Linux #
API #
Method
Description
Windows
macOS
Linux
initSystemTray
Initialize system tray
✔️
✔️
✔️
setSystemTrayInfo
Modify the tray info
icon
toolTip
title
icon
toolTip
icon
setImage
Modify the tray image
✔️
✔️
✔️
setTooltip
Modify the tray tooltip
✔️
✔️
➖
setTitle / getTitle
Set / Get the tray title
➖
✔️
➖
setContextMenu
Set the tray context menu
✔️
✔️
✔️
popUpContextMenu
Popup the tray context menu
✔️
✔️
➖
destroy
Destroy the tray
✔️
✔️
✔️
registerSystemTrayEventHandler
Register system tray event
click
right-click
double-click
click
right-click
➖
Menu #
Type
Description
Windows
macOS
Linux
MenuItemLabel
✔️
✔️
✔️
MenuItemCheckbox
✔️
✔️
✔️
SubMenu
✔️
✔️
✔️
MenuSeparator
✔️
✔️
✔️
Usage #
Future<void> initSystemTray() async {
String path =
Platform.isWindows ? 'assets/app_icon.ico' : 'assets/app_icon.png';
final AppWindow appWindow = AppWindow();
final SystemTray systemTray = SystemTray();
// We first init the systray menu
await systemTray.initSystemTray(
title: "system tray",
iconPath: path,
);
// create context menu
final Menu menu = Menu();
await menu.buildFrom([
MenuItemLabel(label: 'Show', onClicked: (menuItem) => appWindow.show()),
MenuItemLabel(label: 'Hide', onClicked: (menuItem) => appWindow.hide()),
MenuItemLabel(label: 'Exit', onClicked: (menuItem) => appWindow.close()),
]);
// set context menu
await systemTray.setContextMenu(menu);
// handle system tray event
systemTray.registerSystemTrayEventHandler((eventName) {
debugPrint("eventName: $eventName");
if (eventName == kSystemTrayEventClick) {
Platform.isWindows ? appWindow.show() : systemTray.popUpContextMenu();
} else if (eventName == kSystemTrayEventRightClick) {
Platform.isWindows ? systemTray.popUpContextMenu() : appWindow.show();
}
});
}
copied to clipboard
Additional Resources #
Recommended library that supports window control:
bitsdojo_window
window_size (Google)
Q&A #
Q: If you encounter the following compilation error
Undefined symbols for architecture x86_64:
"___gxx_personality_v0", referenced from:
...
copied to clipboard
A: add libc++.tbd
1. open example/macos/Runner.xcodeproj
2. add 'libc++.tbd' to TARGET runner 'Link Binary With Libraries'
copied to clipboard
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.