В Compose Multiplatform для настольных компьютеров можно добавить значок приложения в системный трей и отправлять через него системные уведомления.
Системный трей
Используйте компонуемую функцию Tray(), чтобы добавить значок приложения в системный трей. Tray() доступна в области видимости функции application(), поэтому её можно вызвать рядом с окнами приложения или отдельно.
У компонуемой функции Tray() есть следующие параметры:
icon — Painter, которая рисует значок в трее.
menu — содержимое меню трея. В Windows меню открывается щелчком правой кнопкой мыши, а в macOS — щелчком левой кнопкой мыши. Если не добавить ни одного пункта, меню не появится.
state — TrayState, используемая для отправки уведомлений.
tooltip — подсказка, отображаемая при наведении указателя на значок.
onAction — действие, выполняемое при нажатии на значок: двойной щелчок в Windows и щелчок правой кнопкой мыши в macOS.
В следующем примере создаётся значок приложения в трее с тремя пунктами меню:
Увеличить значение изменяет состояние, отображаемое в окне.
Не во всех средах рабочего стола есть системный трей. Если платформа его не поддерживает, Tray() выводит ошибку в стандартный поток ошибок, а не выбрасывает исключение. Прежде чем показывать в приложении параметры, связанные с треем, проверьте свойство isTraySupported.
Трей без окна
Приложению не обязательно иметь окно, чтобы отображать значок в трее. Если вызвать только функцию Tray(), приложение будет работать исключительно в системном трее:
Поскольку закрывать окно не нужно, функцию exitApplication() следует вызвать из пункта меню.
Уведомления
Чтобы отправить системное уведомление, создайте его с помощью rememberNotification() и передайте в TrayState.sendNotification(), как это сделано в примере с системным треем. Уведомления отправляются через TrayState, переданное компонуемой функции Tray(). Если состояние не связано с треем, уведомление теряется.
Уведомление состоит из заголовка, сообщения и типа, который определяет значок и звук уведомления. Доступны следующие типы: None (по умолчанию), Info, Warning и Error.
Конкретные ресурсы значка и звука зависят от платформы.