From cca4c1b25241ab59a137e3d403133cd0e67a4659 Mon Sep 17 00:00:00 2001 From: Shripal Jain Date: Sun, 18 Jan 2026 20:16:10 +0100 Subject: [PATCH] Dynamically set tray icon variant (light/dark) based on platform theme brightness --- assets/tray/icon_dark.ico | Bin 0 -> 67646 bytes assets/tray/icon_dark.png | Bin 0 -> 5077 bytes assets/tray/{icon.ico => icon_light.ico} | Bin assets/tray/{icon.png => icon_light.png} | Bin lib/init.dart | 7 ++++++- lib/main.dart | 9 +++++++++ 6 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 assets/tray/icon_dark.ico create mode 100644 assets/tray/icon_dark.png rename assets/tray/{icon.ico => icon_light.ico} (100%) rename assets/tray/{icon.png => icon_light.png} (100%) diff --git a/assets/tray/icon_dark.ico b/assets/tray/icon_dark.ico new file mode 100644 index 0000000000000000000000000000000000000000..be7e2632f5380285e2c9bad79d85d73f59458045 GIT binary patch literal 67646 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 Lk4M(O)DiiAQoJ<6 literal 0 HcmV?d00001 diff --git a/assets/tray/icon_dark.png b/assets/tray/icon_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..fd6e90ba4a4200fde272a82b54377c75f8bd06e9 GIT binary patch literal 5077 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 literal 0 HcmV?d00001 diff --git a/assets/tray/icon.ico b/assets/tray/icon_light.ico similarity index 100% rename from assets/tray/icon.ico rename to assets/tray/icon_light.ico diff --git a/assets/tray/icon.png b/assets/tray/icon_light.png similarity index 100% rename from assets/tray/icon.png rename to assets/tray/icon_light.png diff --git a/lib/init.dart b/lib/init.dart index d89b831..6fecbfe 100644 --- a/lib/init.dart +++ b/lib/init.dart @@ -32,9 +32,14 @@ Future init() async { // load system accent color await SystemTheme.accentColor.load(); + initTrayIcon(); +} + +Future initTrayIcon([Brightness platformBrightness = Brightness.light]) async { // tray icon init try { - await trayManager.setIcon(Platform.isWindows ? 'assets/tray/icon.ico' : 'assets/tray/icon.png'); + final iconName = platformBrightness.isDark ? 'icon_light' : 'icon_dark'; + await trayManager.setIcon(Platform.isWindows ? 'assets/tray/$iconName.ico' : 'assets/tray/$iconName.png'); if (Platform.isLinux) { // Don't show title on macOS (takes up more space in menu bar) // Not supported on Windows diff --git a/lib/main.dart b/lib/main.dart index 1f6ae79..990f6ba 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -47,6 +47,15 @@ class _MyAppState extends State { .toList(growable: false); late final _argsMap = {for (final instance in _argsInstances) instance.label: instance}; + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addPostFrameCallback((_) { + final platformBrightness = MediaQuery.of(context).platformBrightness; + initTrayIcon(platformBrightness); + }); + } + @override Widget build(BuildContext context) { return FutureBuilder(