From 701d9eb0954ce1278451a2922409b7d21fbb0475 Mon Sep 17 00:00:00 2001 From: wangjia <809946525@qq.com> Date: Mon, 29 Jun 2026 20:20:55 +0800 Subject: [PATCH] =?UTF-8?q?fix(client):=20=E5=BC=80=E6=9C=BA=E8=87=AA?= =?UTF-8?q?=E5=90=AF=E9=9A=90=E8=97=8F=E7=AA=97=E5=8F=A3=E5=9C=A8=E5=8E=9F?= =?UTF-8?q?=E7=94=9F=20runner=20=E5=B1=82=E8=B7=B3=E8=BF=87=E9=A6=96?= =?UTF-8?q?=E5=B8=A7=20Show()(1.0.29)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1.0.28 的 Dart hide() 早于 Flutter Windows runner 首帧回调的 Show(),被覆盖, 窗口仍弹出。改在 flutter_window.cpp 检测命令行 --autostart 时不注册首帧 Show() 回调,窗口(WS_OVERLAPPEDWINDOW 无 WS_VISIBLE)保持隐藏;Dart hide() 保留以同步 window_manager 状态。 Co-Authored-By: Claude Opus 4.8 --- client/pubspec.yaml | 2 +- client/windows/installer/pangolin.iss | 2 +- client/windows/runner/flutter_window.cpp | 14 +++++++++++--- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/client/pubspec.yaml b/client/pubspec.yaml index 9cca27e..2c93029 100644 --- a/client/pubspec.yaml +++ b/client/pubspec.yaml @@ -1,7 +1,7 @@ name: pangolin_vpn description: 穿山甲 · Pangolin — 极简、稳定、跨平台网络加速客户端。 publish_to: "none" -version: 1.0.28+29 +version: 1.0.29+30 environment: sdk: ^3.5.0 diff --git a/client/windows/installer/pangolin.iss b/client/windows/installer/pangolin.iss index 3681f49..032422a 100644 --- a/client/windows/installer/pangolin.iss +++ b/client/windows/installer/pangolin.iss @@ -3,7 +3,7 @@ ; 前置: 先在 client/ 跑 `flutter build windows`(Release),产物在 ; ..\..\build\windows\x64\runner\Release #define MyAppName "穿山甲 Pangolin" -#define MyAppVersion "1.0.28" +#define MyAppVersion "1.0.29" #define MyAppPublisher "Pangolin" #define MyAppExeName "pangolin_vpn.exe" #define BuildDir "..\..\build\windows\x64\runner\Release" diff --git a/client/windows/runner/flutter_window.cpp b/client/windows/runner/flutter_window.cpp index 955ee30..982fc49 100644 --- a/client/windows/runner/flutter_window.cpp +++ b/client/windows/runner/flutter_window.cpp @@ -1,6 +1,7 @@ #include "flutter_window.h" #include +#include #include "flutter/generated_plugin_registrant.h" @@ -27,9 +28,16 @@ bool FlutterWindow::OnCreate() { RegisterPlugins(flutter_controller_->engine()); SetChildContent(flutter_controller_->view()->GetNativeWindow()); - flutter_controller_->engine()->SetNextFrameCallback([&]() { - this->Show(); - }); + // 开机自启(命令行带 --autostart):跳过首帧的 Show(),窗口保持隐藏到托盘。 + // 窗口以 WS_OVERLAPPEDWINDOW(不含 WS_VISIBLE)创建,本就隐藏,只靠这个回调显示; + // 不注册回调即一直不显示。否则首帧回调的 Show() 会覆盖 Dart 侧的 hide(),窗口仍弹出。 + const wchar_t* cmd = GetCommandLineW(); + const bool autostart = cmd != nullptr && wcsstr(cmd, L"--autostart") != nullptr; + if (!autostart) { + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + } // Flutter can complete the first frame before the "show window" callback is // registered. The following call ensures a frame is pending to ensure the