Flutter实现桌面应用系统托盘功能

xiaohai 2022-04-22 14:15:04 3938人围观 标签: Flutter 
简介桌面应用很多都会在系统托盘中出现,那么Flutter的开发的桌面应用该如何增加到系统托盘中呢?本文将带大家一起尝试一下.

system_tray:是一个支持系统托盘的插件,支持Windows、MacOS和Linux系统.
插件名称:system_tray
地址:https://pub.flutter-io.cn/packages/system_tray
图片alt

下面我们就一起来使用下:

一、安装
flutter pub add system_tray
二、准备图标图片

准备一张图片图标图片,放在assets下面,根据系统选择图片后缀,我这里是windows系统,所以需要使用.ico的图片,如果使用png的图片,系统会报错:

Unhandled Exception: PlatformException(Bad Arguments, Unable to init system tray, false, null)
三、编写代码

在main.dart中,添加如下函数

Future<void> initTray() async {
    final systemTray = SystemTray();
    await systemTray.initSystemTray(
        title: "haha", iconPath: "assets/images/icon.ico");
    //设置操作菜单
    await systemTray.setContextMenu([
      MenuItem(
        label: "显示",
        onClicked: appWindow.show,
      ),
      MenuItem(
        label: "隐藏",
        onClicked: appWindow.hide,
      ),
      MenuItem(
        label: "退出",
        onClicked: appWindow.close,
      ),
    ]);
    //注册相关处理事件
    systemTray.registerSystemTrayEventHandler((eventName) {
      debugPrint("eventName: $eventName");
      if (eventName == "leftMouseDown") {
      } else if (eventName == "leftMouseUp") {
        appWindow.show();
      } else if (eventName == "rightMouseDown") {
      } else if (eventName == "rightMouseUp") {
        systemTray.popUpContextMenu();
      }
    });
  }

然后调用下函数即可,运行后显示如下:
图片alt

除了上面介绍的system_tray插件外,还有一款插件也可以实现系统托盘功能,而且功能更加齐全,插件就是tray_manager,详细文档请参考,
tray_manager