⚠️ 迁移通知: 本插件正在迁移到 libnativeapi/nativeapi-flutter新版本基于统一的 C++ 核心库(libnativeapi/nativeapi),提供更完整、一致的跨平台原生 API 支持。
这个插件允许 Flutter 桌面应用定义系统托盘。
English | 简体中文
| Linux | macOS | Windows |
|---|---|---|
| ✔️ | ✔️ | ✔️ |
| macOS | Linux | Windows |
|---|---|---|
![]() |
![]() |
![]() |
当同时使用 app_links 包和 tray_manager 时,可能会出现插件无法正常工作。这是因为低版本 app_links 在内部阻止了事件传播,导致菜单点击事件无法触发。
要解决此问题:
- 确保你的
app_links包版本大于或等于 6.3.3
dependencies:
app_links: ^6.3.3- 使用 protocol_handler 包代替
app_links包。
在使用 GNOME 桌面时, 可能需要安装 AppIndicator 扩展以显示图标。
将此添加到你的软件包的 pubspec.yaml 文件:
dependencies:
tray_manager: ^0.5.2或
dependencies:
tray_manager:
git:
url: https://github.com/leanflutter/tray_manager.git
ref: main
path: packages/tray_managerayatana-appindicator3-0.1orappindicator3-0.1
运行以下命令
sudo apt-get install libayatana-appindicator3-dev
或
sudo apt-get install appindicator3-0.1 libappindicator3-dev
import 'package:flutter/material.dart' hide MenuItem;
import 'package:tray_manager/tray_manager.dart';
await trayManager.setIcon(
Platform.isWindows
? 'images/tray_icon.ico'
: 'images/tray_icon.png',
);
Menu menu = Menu(
items: [
MenuItem(
key: 'show_window',
label: 'Show Window',
),
MenuItem.separator(),
MenuItem(
key: 'exit_app',
label: 'Exit App',
),
],
);
await trayManager.setContextMenu(menu);请看这个插件的示例应用,以了解完整的例子。
import 'package:flutter/material.dart';
import 'package:tray_manager/tray_manager.dart';
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> with TrayListener {
@override
void initState() {
trayManager.addListener(this);
super.initState();
_init();
}
@override
void dispose() {
trayManager.removeListener(this);
super.dispose();
}
void _init() {
// ...
}
@override
Widget build(BuildContext context) {
// ...
}
@override
void onTrayIconMouseDown() {
// do something, for example pop up the menu
trayManager.popUpContextMenu();
}
@override
void onTrayIconRightMouseDown() {
// do something
}
@override
void onTrayIconRightMouseUp() {
// do something
}
@override
void onTrayMenuItemClick(MenuItem menuItem) {
if (menuItem.key == 'show_window') {
// do something
} else if (menuItem.key == 'exit_app') {
// do something
}
}
}| Method | Description | Linux | macOS | Windows |
|---|---|---|---|---|
| destroy | 立即销毁托盘图标 | ✔️ | ✔️ | ✔️ |
| setIcon | 设置与此托盘图标相关的图片。 | ✔️ | ✔️ | ✔️ |
| setIconPosition | 设置托盘图标的图标位置。 | ➖ | ✔️ | ➖ |
| setToolTip | 设置此托盘图标的悬停文本。 | ➖ | ✔️ | ✔️ |
| setContextMenu | 设置此图标的上下文菜单。 | ✔️ | ✔️ | ✔️ |
| popUpContextMenu | 弹出托盘图标的上下文菜单。 | ➖ | ✔️ | ✔️ |
| getBounds | 返回 Rect 这个托盘图标的边界。 |
➖ | ✔️ | ✔️ |


