Skip to content

leanflutter/tray_manager

Repository files navigation

🚀 Ship Your App Faster: Try Fastforge - The simplest way to build, package and distribute your Flutter apps.

tray_manager

pub version

This plugin allows Flutter desktop apps to defines system tray.

Note: This plugin is planned to migrate to nativeapi to improve maintainability and performance, but the solution is still experimental at this stage.


English | 简体中文


Platform Support

Linux macOS Windows
✔️ ✔️ ✔️

Screenshots

macOS Linux Windows
image

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.0

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

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 (比译) - 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

License

Stars

Watchers

Forks

Sponsor this project

Contributors 17