fix(client/windows): 修桌面/标题栏图标 + 标题文案 + 系统托盘空白
- app_icon.ico 重新由 assets/app-icon.svg 生成(穿山甲品牌图标,多尺寸),
替换残留的默认 Flutter logo —— 同时修好桌面图标与标题栏小图标。
- 窗口标题去掉 "VPN" 字眼:main.cpp 原生标题 pangolin_vpn → Pangolin;
main.dart 用 windowManager.setTitle('穿山甲') 显示中文品牌名;
Runner.rc 的 FileDescription/InternalName/ProductName → Pangolin。
- 系统托盘空白:Windows 走 Win32 Shell_NotifyIcon 只认 .ico(传 PNG 显示空白),
新增 BMP 编码的 assets/tray_icon.ico,system_tray.dart 按平台选 ico/png。
- 安装包版本 1.0.0 → 1.0.1(pubspec 1.0.1+2)便于区分测试构建。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
@@ -31,6 +31,8 @@ Future<void> main() async {
|
||||
await windowManager.setMinimumSize(const Size(720, 560));
|
||||
await windowManager.setSize(const Size(920, 640));
|
||||
await windowManager.center();
|
||||
// 窗口标题用中文品牌名(不带 "VPN" 字眼);英文环境下原生标题为 "Pangolin"。
|
||||
await windowManager.setTitle('穿山甲');
|
||||
}
|
||||
runApp(const ProviderScope(child: PangolinApp()));
|
||||
}
|
||||
|
||||
@@ -53,7 +53,11 @@ class TrayService with TrayListener, WindowListener {
|
||||
windowManager.addListener(this);
|
||||
|
||||
trayManager.addListener(this);
|
||||
await trayManager.setIcon('assets/tray_icon.png');
|
||||
// Windows 托盘走 Win32 Shell_NotifyIcon,只认 .ico(传 PNG 会显示空白);
|
||||
// macOS/Linux 用 PNG。
|
||||
await trayManager.setIcon(
|
||||
Platform.isWindows ? 'assets/tray_icon.ico' : 'assets/tray_icon.png',
|
||||
);
|
||||
await trayManager.setToolTip('穿山甲 Pangolin');
|
||||
await trayManager.setContextMenu(Menu(items: [
|
||||
MenuItem(key: 'show', label: '显示主界面'),
|
||||
|
||||
+2
-1
@@ -1,7 +1,7 @@
|
||||
name: pangolin_vpn
|
||||
description: 穿山甲 · Pangolin — 极简、稳定、跨平台网络加速客户端。
|
||||
publish_to: "none"
|
||||
version: 1.0.0+1
|
||||
version: 1.0.1+2
|
||||
|
||||
environment:
|
||||
sdk: ^3.5.0
|
||||
@@ -45,6 +45,7 @@ flutter:
|
||||
- assets/logo-wordmark.svg
|
||||
- assets/app-icon.svg
|
||||
- assets/tray_icon.png
|
||||
- assets/tray_icon.ico # Windows 托盘专用(Win32 只认 .ico)
|
||||
|
||||
# ── 字体(本地打包,全平台离线)──
|
||||
# 拉丁全量(Sora/Manrope/JetBrains Mono)+ Noto Sans SC 子集(GB2312 6763 字,单 Regular
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
; 前置: 先在 client/ 跑 `flutter build windows`(Release),产物在
|
||||
; ..\..\build\windows\x64\runner\Release
|
||||
#define MyAppName "穿山甲 Pangolin"
|
||||
#define MyAppVersion "1.0.0"
|
||||
#define MyAppVersion "1.0.1"
|
||||
#define MyAppPublisher "Pangolin"
|
||||
#define MyAppExeName "pangolin_vpn.exe"
|
||||
#define BuildDir "..\..\build\windows\x64\runner\Release"
|
||||
|
||||
@@ -90,12 +90,12 @@ BEGIN
|
||||
BLOCK "040904e4"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "com.pangolin" "\0"
|
||||
VALUE "FileDescription", "pangolin_vpn" "\0"
|
||||
VALUE "FileDescription", "Pangolin" "\0"
|
||||
VALUE "FileVersion", VERSION_AS_STRING "\0"
|
||||
VALUE "InternalName", "pangolin_vpn" "\0"
|
||||
VALUE "InternalName", "Pangolin" "\0"
|
||||
VALUE "LegalCopyright", "Copyright (C) 2026 com.pangolin. All rights reserved." "\0"
|
||||
VALUE "OriginalFilename", "pangolin_vpn.exe" "\0"
|
||||
VALUE "ProductName", "pangolin_vpn" "\0"
|
||||
VALUE "ProductName", "Pangolin" "\0"
|
||||
VALUE "ProductVersion", VERSION_AS_STRING "\0"
|
||||
END
|
||||
END
|
||||
|
||||
@@ -27,7 +27,7 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
|
||||
FlutterWindow window(project);
|
||||
Win32Window::Point origin(10, 10);
|
||||
Win32Window::Size size(1280, 720);
|
||||
if (!window.Create(L"pangolin_vpn", origin, size)) {
|
||||
if (!window.Create(L"Pangolin", origin, size)) {
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
window.SetQuitOnClose(true);
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 34 KiB |
Reference in New Issue
Block a user