fix(client): 开机自启隐藏窗口在原生 runner 层跳过首帧 Show()(1.0.29)
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 <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
#include "flutter_window.h"
|
||||
|
||||
#include <optional>
|
||||
#include <cwchar>
|
||||
|
||||
#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
|
||||
|
||||
Reference in New Issue
Block a user