4 Commits
Author SHA1 Message Date
dzc a7cc69bb92 fix(mac): 点红点直接退出——真凶是模板 AppDelegate 的关窗即退开关
三层排查实锤(lldb 运行时取证):
1. 红点按钮真实 action 是 AppKit 私有 selector `_close:`(并非文档所称
   performClose:),内部直接关窗,绕过 performClose/close 重写与 delegate 拦截
2. flutter create 模板的 AppDelegate 自带
   applicationShouldTerminateAfterLastWindowClosed 返回 true——最后一个窗口
   关闭即 NSApp.terminate,这是"点红点进程退出、托盘随进程消失"的根因
3. 修复:改为返回 false。窗口即便被真关闭,进程/HTTP 服务/托盘也保持运行,
   托盘点击 makeKeyAndOrderFront 恢复窗口(releasedWhenClosed=NO,窗口对象在)

验证(红点 action 原样重放 `_close:`):窗口关闭后进程存活、服务在线、
托盘状态栏窗口存在、makeKeyAndOrderFront 可恢复窗口。
保留 MainFlutterWindow 的 performClose/close 重写(Cmd+W 等正常路径只隐藏
不关闭,体验更好)。
2026-09-21 13:34:46 +08:00
dzc fb06e629c2 fix(mac): 点击红点直接退出而非最小化到托盘——原生侧重写 performClose 双保险
根因:window_manager 的 setPreventClose 依赖把 WindowManager 挂为 NSWindowDelegate
来拦 windowShouldClose,在 xib 创建的窗口上该 delegate 挂载时机不可靠(会被
xib 原有 delegate/AppKit 流程绕过),preventClose 形同虚设,红点直接关窗。

修复:MainFlutterWindow 重写 performClose(_:)(红点与 Cmd+W 的 target-action
必经之路),直接 orderOut 隐藏窗口,进程/HTTP 服务/托盘保持运行;不依赖
window_manager 的 delegate 是否挂上。真正退出只走托盘菜单 →
window_manager.destroy() → NSApp.terminate(不经过 performClose,无冲突);
Cmd+Q 系统标准退出保留。window_manager 的 onWindowClose→hide 路径保留
(若 delegate 生效则幂等)。
2026-09-21 13:20:28 +08:00
dzc bee734fd5b feat: 后台托盘 + 资安信品牌化 + 修复布局断言(Phase 4 部分)
- 后台托盘(mac/Windows):window_manager 拦截关窗改隐藏,服务持续运行;
  托盘单击恢复窗口、右键菜单(显示主界面/退出),退出入口仅放托盘菜单
- 品牌:App 更名"资安信插件助手"(mac PRODUCT_NAME/xib、win main.cpp+Runner.rc(code_page 65001)、
  MaterialApp/侧栏/托盘 tooltip/日志);图标全家桶换资安信盾牌 logo
  (tool/gen_app_icons.dart 生成 mac AppIcon 7 尺寸/win ICO 7 尺寸/托盘白底圆盘版/assets logo)
- 修复启动布局断言:SliverList 内 Row(stretch) 需 IntrinsicHeight 包裹,
  否则子项收到 h=Infinity 约束(用户实测报错,test/ui_smoke_test.dart 守护复现)
- Agent.stop 幂等(托盘退出与窗口销毁竞态安全)
- 测试修复:smoke 测试改 tester.runAsync 包真实 socket I/O(fake async zone 里会永久挂起)、
  显式 pump 替代 pumpAndSettle;13 个测试全过,analyze 零问题,release 构建实测通过
2026-09-21 13:16:23 +08:00
dzc 689a07ca44 feat: 饭卡打印助手 Flutter 版(Phase 1/2:协议服务器 + macOS CUPS 真机打印)
- 协议与 C# 版 card-printer-agent 逐字段对齐(38200-38202 顺延、CORS *、串行任务队列、30 分钟保留)
- macOS CUPS 后端:lpoptions 队列发现 + lp 参数列表提交(LC_ALL=C 防本地化粘连坑)
- --mock 模拟模式 + bin/agent.dart headless 入口 + 测试卡生成工具
- 真机验收:HiTi CS-200e status 就绪 + 真实出卡;macOS 通用二进制构建通过
- App Sandbox 已关闭(服务需绑回环端口并调用 lp 子进程);zaxprint URL scheme 已注册
2026-09-21 12:03:27 +08:00