Dark Mode

Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

This plugin allows Flutter desktop apps to defines system tray.

License

Notifications You must be signed in to change notification settings

leanflutter/tray_manager

Repository files navigation

Migration Notice: This plugin is being migrated to libnativeapi/nativeapi-flutter

The new version is based on a unified C++ core library (libnativeapi/nativeapi), providing more complete and consistent cross-platform native API support. r

This plugin allows Flutter desktop apps to defines system tray.

English | Jian Ti Zhong Wen


  • Platform Support
  • Screenshots
  • Known Issues
    • Not Working with app_links
    • Not Showing in GNOME
  • Quick Start
    • Installation
      • Linux requirements
    • Usage
      • Listening events
  • Who's using it?
  • API
    • TrayManager
  • License

Platform Support

Linux macOS Windows

Screenshots

macOS Linux Windows

Known Issues

Not Working with app_links

When using the app_links package together with tray_manager, the plugin may not work properly. This is because older versions of app_links internally block event propagation, preventing menu click events from being triggered.

To resolve this issue:

  1. Make sure your app_links package version is greater than or equal to 6.3.3
dependencies:
app_links: ^6.3.3
  1. Use protocol_handler package instead of app_links package.

Not Showing in GNOME

In GNOME desktop environment, the AppIndicator extension may be required to display the icon.

Quick Start

Installation

Add this to your package's pubspec.yaml file:

dependencies:
tray_manager: ^0.5.2

Or

dependencies:
tray_manager:
git:
url: https://github.com/leanflutter/tray_manager.git
ref: main
path: packages/tray_manager

Linux requirements

  • ayatana-appindicator3-0.1 or appindicator3-0.1

Run the following command

sudo apt-get install libayatana-appindicator3-dev

Or

sudo apt-get install appindicator3-0.1 libappindicator3-dev

Usage

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);

Please see the example app of this plugin for a full example.

Listening events

_HomePageState(); } class _HomePageState extends State 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 } } }">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
}
}
}

Who's using it?

  • Airclap - Send any file to any device. cross platform, ultra fast and easy to use.
  • Biyi (Bi Yi ) - A convenient translation and dictionary app.

API

TrayManager

Method Description Linux macOS Windows
destroy Destroys the tray icon immediately.
setIcon Sets the image associated with this tray icon.
setIconPosition Sets the icon position of the tray icon.
setToolTip Sets the hover text for this tray icon.
setContextMenu Sets the context menu for this icon.
popUpContextMenu Pops up the context menu of the tray icon.
getBounds Returns Rect The bounds of this tray icon.

License

MIT

About

This plugin allows Flutter desktop apps to defines system tray.

Topics

Resources

Readme

License

MIT license

Stars

Watchers

Forks

Sponsor this project

Contributors