Windows 窗口关闭回归
2026-10-17,Windows 原生 Release 窗口。
系统 Application 日志中存在 vex.exe 在 flutter_windows.dll 内的
0xc0000005 / 0xc000041d 崩溃记录。修复前重新启动 Release,点击右上角关闭后
进程 Responding=False,随后退出,重现了用户反馈。
window_manager 0.5.2 的 Windows destroy() 只调用 PostQuitMessage(0)。
原路径在 HWND 仍存活时退出消息循环,且主函数先 CoUninitialize(),随后才析构
Flutter 控制器及其插件。现在先保存草稿,通过 setPreventClose(false) 和
close() 让原生窗口正常销毁,并在 COM 反初始化前完成窗口对象的析构。
已批准的第二次原生关闭事件不再重复弹出保存对话框或执行草稿写入。
原生验证:修复版右上角关闭可退出;连续三次启动并按 Alt+F4,退出码均为 0, 从发起按键到观测退出分别为 207、208、200 ms。该耗时包含自动化按键开销, 不是引擎析构的独立耗时。
test/window_close_test.dart 另验证取消后重试、草稿写入失败时保留窗口、失败后
重试成功、未保存内容确实进入恢复快照,以及最终采用正常关闭而非 destroy()。
这些测试使用内存仓储,不访问用户文档。
复查命令:flutter test --no-pub test/window_close_test.dart。
macOS / Linux 的原生退出行为仍需对应设备实测。
💬 评论暂未开启
有疑问或建议,欢迎到 GitHub 提交 Issue 参与讨论。
有疑问或建议,欢迎到 GitHub 提交 Issue 参与讨论。