Skip to content

A Flutter package that makes it easy to customize and work with your Flutter desktop app's system tray.

License

Notifications You must be signed in to change notification settings

ggdream/system_tray

 
 

Repository files navigation

system_tray

A Flutter package that that enables support for system tray menu for desktop flutter apps. on Windows, macOS and Linux.

Features:

- Modify system tray title/icon/tooltip
- Handle system tray event leftMouseUp/rightMouseUp (only for macos、windows)

Getting Started

Install the package using pubspec.yaml

For Windows

For macOS

For Linux

API

Below we show how to use system_tray

  1. Smallest example
Future<void> initSystemTray() async {
  final path =
      Platform.isWindows ? 'assets/app_icon.ico' : 'assets/app_icon.png';
  final menu = [
    MenuItem(label: 'Show', onClicked: _appWindow.show),
    MenuItem(label: 'Hide', onClicked: _appWindow.hide),
    MenuItem(label: 'Exit', onClicked: _appWindow.close),
  ];

  await _systemTray.initSystemTray(
    title: "system tray",
    iconPath: path,
  );

  await _systemTray.setContextMenu(menu);
}
  1. Icon flashing effect example
Future<void> initSystemTray() async {
  final path =
      Platform.isWindows ? 'assets/app_icon.ico' : 'assets/app_icon.png';
  final menu = [
    MenuItem(label: 'Show', onClicked: _appWindow.show),
    MenuItem(label: 'Hide', onClicked: _appWindow.hide),
    MenuItem(
      label: 'Start flash tray icon',
      onClicked: () {
        debugPrint("Start flash tray icon");

        _timer ??= Timer.periodic(
          const Duration(milliseconds: 500),
          (timer) {
            _toogleTrayIcon = !_toogleTrayIcon;
            _systemTray.setSystemTrayInfo(
              iconPath: _toogleTrayIcon ? "" : path,
            );
          },
        );
      },
    ),
    MenuItem(
      label: 'Stop flash tray icon',
      onClicked: () {
        debugPrint("Stop flash tray icon");

        _timer?.cancel();
        _timer = null;

        _systemTray.setSystemTrayInfo(
          iconPath: path,
        );
      },
    ),
    MenuSeparator(),
    SubMenu(
      label: "SubMenu",
      children: [
        MenuItem(
          label: 'SubItem1',
          enabled: false,
          onClicked: () {
            debugPrint("click SubItem1");
          },
        ),
        MenuItem(
          label: 'SubItem2',
          onClicked: () {
            debugPrint("click SubItem2");
          },
        ),
        MenuItem(
          label: 'SubItem3',
          onClicked: () {
            debugPrint("click SubItem3");
          },
        ),
      ],
    ),
    MenuSeparator(),
    MenuItem(
      label: 'Exit',
      onClicked: _appWindow.close,
    ),
  ];

  // We first init the systray menu and then add the menu entries
  await _systemTray.initSystemTray(
    title: "system tray",
    iconPath: path,
    toolTip: "How to use system tray with Flutter",
  );

  await _systemTray.setContextMenu(menu);

  // handle system tray event
  _systemTray.registerSystemTrayEventHandler((eventName) {
    debugPrint("eventName: $eventName");
    if (eventName == "leftMouseUp") {
      _appWindow.show();
    }
  });
}

Addition

Recommended library that supports window control:

About

A Flutter package that makes it easy to customize and work with your Flutter desktop app's system tray.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 56.4%
  • Dart 15.1%
  • CMake 14.7%
  • Swift 9.8%
  • C 2.2%
  • Ruby 1.8%