Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
# Changelog

## 1.12.1

### Fixed / 修复
- 网络抓取多项正确性修复:非 443 的 https 端口(如 8443)现在按 https 记录 URL,避免导出 / 复制 cURL 时把 https 错记成 http;命中请求体规则且进入直传模式时不再改写 `Content-Length`,避免服务端按错误长度读取请求体;响应体未被消费(只读了 `statusCode`/headers)时状态码现在也会落库,不再永远停在 pending;`done` getter 与 `close()` 复用同一响应代理,避免单订阅流被重复消费;`add()` 与 `addStream()` 混用不再丢失初始 chunk。 / Network capture correctness fixes: https URLs on non-443 ports (e.g. 8443) are now recorded as https so the exported cURL is correct; when a request-body rule hits in pass-through mode we no longer rewrite `Content-Length` (which made the server read the wrong body length); a status code is now persisted even when the response body is never consumed (only `statusCode`/headers read), so the request is no longer stuck pending forever; `done` and `close()` share one response proxy to avoid double-listening to the single-subscription stream; mixing `add()` and `addStream()` no longer drops the initial chunk.
- WebSocket / gRPC 记录现在会落盘:连接关闭 / 调用完成时补合成状态码(101 / 200),不再永远 pending、也不再从会话存档导出中丢失;WS 抓取关闭时握手 GET 作为普通请求出现在网络列表,不再彻底不可见。 / WebSocket / gRPC records are now persisted: a synthetic status code (101 / 200) is added on close / call completion so they are no longer stuck pending or missing from exported session archives; when WS capture is disabled the handshake GET shows up as a normal request instead of vanishing.
- 日志拦截补全两行式集成(`init()` + `wrapApp()`)下漏捕的异步异常:新增全局 Isolate 级错误监听,未捕获的 `Future` / `Stream` 异常也会写入检查器日志与 Errors Tab(原 `runZonedGuarded(() {}, …)` 为空死代码,从未捕获任何异常)。 / Log interception now captures async errors missed under the two-liner integration (`init()` + `wrapApp()`): a global isolate-level error listener writes uncaught `Future` / `Stream` errors to the inspector log and Errors tab (the previous `runZonedGuarded(() {}, …)` was dead code that never caught anything).
- `NetworkRequest.toJson` 对 Map / List 类型的请求 / 响应体改用 `jsonEncode`,不再被 `toString()` 成 Dart 字面量导致导出后无法解析还原。 / `NetworkRequest.toJson` now uses `jsonEncode` for Map / List bodies instead of `toString()`, which produced Dart literals that could not be parsed back after export.
- 无 VM Service(release / 真机 profile)时不再自动判内存泄漏,避免已释放但尚未回收的对象被误报。 / Memory leaks are no longer auto-flagged without VM Service (release / real-device profile), avoiding false positives for objects already released but not yet collected.
- 悬浮按钮每次吸附动画移除上一次 listener,避免陈旧 listener 残留持续触发 `setState`;`ThrottledNotifier` 在 App 退后台不产帧时用 Timer 兜底通知,避免丢失;Dio 找不到匹配请求时回退记录先入列表再更新,避免 `onResponse` / `onError` 数据丢失;`DatabaseService.queryTable` 保留首个带错误的 provider 结果,避免失败消息被后续空结果吞掉。 / Floating button now removes the previous dock-animation listener to avoid stale listeners firing `setState`; `ThrottledNotifier` fires via a Timer when the app is backgrounded and produces no frames, avoiding dropped notifications; when Dio finds no matching request the fallback record is added to the list before update so `onResponse` / `onError` data is not lost; `DatabaseService.queryTable` keeps the first error-carrying provider result so a failure message is not swallowed by a later empty result.

## 1.12.0

### Added / 新增
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ An in-app developer console for Flutter: inspect HTTP, WebSocket & gRPC traffic,
[![Dart](https://img.shields.io/badge/Dart-✓-0175C2?logo=dart)](https://dart.dev)
[![Style: effective dart](https://img.shields.io/badge/style-effective_dart-40c4ff.svg)](https://pub.dev/packages/effective_dart)

> **🔔 Upgrade recommended:** This release adds a unified session timeline and a main-thread blocking watchdog (catches stalls invisible to FPS); `runAppWithInspector` also degrades gracefully instead of crashing with "Zone mismatch" when the binding is pre-initialized. All users are encouraged to upgrade to the latest version (`^1.12.0`).
> **🔔 Upgrade recommended:** This release fixes several network-capture correctness bugs (https URL on non-443 ports, request-body rule `Content-Length` mismatch in pass-through mode, responses that are never consumed staying pending forever, WebSocket/gRPC records never being persisted, and the `done` getter returning a different response proxy) plus async errors being missed under the `init()` + `wrapApp()` two-liner and a memory-leak false-positive without VM Service. All users are encouraged to upgrade to the latest version (`^1.12.1`).

🌐 **[Official Website](https://www.zerolabsco.com/)**  ·  📦 **[View on pub.dev](https://pub.dev/packages/zero_inspector_kit)**  ·  🔗 **[View on GitHub](https://github.com/zero-labsco/zero_inspector_kit)**

Expand Down Expand Up @@ -102,7 +102,7 @@ An in-app developer console for Flutter: inspect HTTP, WebSocket & gRPC traffic,

```yaml
dependencies:
zero_inspector_kit: ^1.12.0
zero_inspector_kit: ^1.12.1
```

### GitHub
Expand All @@ -112,7 +112,7 @@ dependencies:
zero_inspector_kit:
git:
url: https://github.com/zero-labsco/zero_inspector_kit.git
ref: release/v1.12.0 # replace 1.12.0 with the version you need
ref: release/v1.12.1 # replace 1.12.1 with the version you need
```

---
Expand Down
6 changes: 3 additions & 3 deletions README_zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
[![Dart](https://img.shields.io/badge/Dart-✓-0175C2?logo=dart)](https://dart.dev)
[![Style: effective dart](https://img.shields.io/badge/style-effective_dart-40c4ff.svg)](https://pub.dev/packages/effective_dart)

> **🔔 推荐升级:** 本版本新增统一会话时间线,以及在 FPS 之下看不见的「零帧卡死」主线程阻塞看门狗;当 binding 已被预先初始化时,`runAppWithInspector` 不再以 "Zone mismatch" 崩溃,而是优雅降级。建议所有用户升级到最新版本(`^1.12.0`)。
> **🔔 推荐升级:** 本版本修复了多处网络抓取正确性 bug(非 443 端口的 https URL、直传模式下请求体规则的 `Content-Length` 错配、响应体未被消费时永远停在 pending、WebSocket/gRPC 记录从不落盘、`done` getter 返回不同响应代理),以及两行式集成(`init()` + `wrapApp()`)下漏捕的异步异常、无 VM Service 时的内存泄漏误报。建议所有用户升级到最新版本(`^1.12.1`)。

🌐 **[官方网站](https://www.zerolabsco.com/)**  ·  📦 **[在 pub.dev 查看](https://pub.dev/packages/zero_inspector_kit)**  ·  🔗 **[查看 GitHub 仓库](https://github.com/zero-labsco/zero_inspector_kit)**

Expand Down Expand Up @@ -101,7 +101,7 @@

```yaml
dependencies:
zero_inspector_kit: ^1.12.0
zero_inspector_kit: ^1.12.1
```

### GitHub
Expand All @@ -111,7 +111,7 @@ dependencies:
zero_inspector_kit:
git:
url: https://github.com/zero-labsco/zero_inspector_kit.git
ref: release/v1.12.0 # 将 1.12.0 替换为你需要的版本号
ref: release/v1.12.1 # 将 1.12.1 替换为你需要的版本号
```

---
Expand Down
2 changes: 1 addition & 1 deletion docs/404.html
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>404: This page could not be found</title><meta name="next-head-count" content="3"/><link rel="preload" href="/zero_inspector_kit/_next/static/css/df9fc72061aac7da.css" as="style"/><link rel="stylesheet" href="/zero_inspector_kit/_next/static/css/df9fc72061aac7da.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/zero_inspector_kit/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/zero_inspector_kit/_next/static/chunks/webpack-ad90bb3f37d3ab33.js" defer=""></script><script src="/zero_inspector_kit/_next/static/chunks/framework-64ad27b21261a9ce.js" defer=""></script><script src="/zero_inspector_kit/_next/static/chunks/main-f5dfbda958d94c6d.js" defer=""></script><script src="/zero_inspector_kit/_next/static/chunks/pages/_app-dfead9b5b0a86c83.js" defer=""></script><script src="/zero_inspector_kit/_next/static/chunks/pages/_error-7a92967bea80186d.js" defer=""></script><script src="/zero_inspector_kit/_next/static/SozSnA7VxY0DQRMRZIWM2/_buildManifest.js" defer=""></script><script src="/zero_inspector_kit/_next/static/SozSnA7VxY0DQRMRZIWM2/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">This page could not be found<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"SozSnA7VxY0DQRMRZIWM2","assetPrefix":"/zero_inspector_kit","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>404: This page could not be found</title><meta name="next-head-count" content="3"/><link rel="preload" href="/zero_inspector_kit/_next/static/css/df9fc72061aac7da.css" as="style"/><link rel="stylesheet" href="/zero_inspector_kit/_next/static/css/df9fc72061aac7da.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/zero_inspector_kit/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/zero_inspector_kit/_next/static/chunks/webpack-ad90bb3f37d3ab33.js" defer=""></script><script src="/zero_inspector_kit/_next/static/chunks/framework-64ad27b21261a9ce.js" defer=""></script><script src="/zero_inspector_kit/_next/static/chunks/main-f5dfbda958d94c6d.js" defer=""></script><script src="/zero_inspector_kit/_next/static/chunks/pages/_app-dfead9b5b0a86c83.js" defer=""></script><script src="/zero_inspector_kit/_next/static/chunks/pages/_error-7a92967bea80186d.js" defer=""></script><script src="/zero_inspector_kit/_next/static/HOKBL-YNOJJmFvcM-iq75/_buildManifest.js" defer=""></script><script src="/zero_inspector_kit/_next/static/HOKBL-YNOJJmFvcM-iq75/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">This page could not be found<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"HOKBL-YNOJJmFvcM-iq75","assetPrefix":"/zero_inspector_kit","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
2 changes: 1 addition & 1 deletion docs/404/index.html
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>404: This page could not be found</title><meta name="next-head-count" content="3"/><link rel="preload" href="/zero_inspector_kit/_next/static/css/df9fc72061aac7da.css" as="style"/><link rel="stylesheet" href="/zero_inspector_kit/_next/static/css/df9fc72061aac7da.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/zero_inspector_kit/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/zero_inspector_kit/_next/static/chunks/webpack-ad90bb3f37d3ab33.js" defer=""></script><script src="/zero_inspector_kit/_next/static/chunks/framework-64ad27b21261a9ce.js" defer=""></script><script src="/zero_inspector_kit/_next/static/chunks/main-f5dfbda958d94c6d.js" defer=""></script><script src="/zero_inspector_kit/_next/static/chunks/pages/_app-dfead9b5b0a86c83.js" defer=""></script><script src="/zero_inspector_kit/_next/static/chunks/pages/_error-7a92967bea80186d.js" defer=""></script><script src="/zero_inspector_kit/_next/static/SozSnA7VxY0DQRMRZIWM2/_buildManifest.js" defer=""></script><script src="/zero_inspector_kit/_next/static/SozSnA7VxY0DQRMRZIWM2/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">This page could not be found<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"SozSnA7VxY0DQRMRZIWM2","assetPrefix":"/zero_inspector_kit","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>404: This page could not be found</title><meta name="next-head-count" content="3"/><link rel="preload" href="/zero_inspector_kit/_next/static/css/df9fc72061aac7da.css" as="style"/><link rel="stylesheet" href="/zero_inspector_kit/_next/static/css/df9fc72061aac7da.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/zero_inspector_kit/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/zero_inspector_kit/_next/static/chunks/webpack-ad90bb3f37d3ab33.js" defer=""></script><script src="/zero_inspector_kit/_next/static/chunks/framework-64ad27b21261a9ce.js" defer=""></script><script src="/zero_inspector_kit/_next/static/chunks/main-f5dfbda958d94c6d.js" defer=""></script><script src="/zero_inspector_kit/_next/static/chunks/pages/_app-dfead9b5b0a86c83.js" defer=""></script><script src="/zero_inspector_kit/_next/static/chunks/pages/_error-7a92967bea80186d.js" defer=""></script><script src="/zero_inspector_kit/_next/static/HOKBL-YNOJJmFvcM-iq75/_buildManifest.js" defer=""></script><script src="/zero_inspector_kit/_next/static/HOKBL-YNOJJmFvcM-iq75/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">This page could not be found<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"HOKBL-YNOJJmFvcM-iq75","assetPrefix":"/zero_inspector_kit","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
4 changes: 2 additions & 2 deletions docs/Alerts/index.html

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions docs/Configuration/index.html

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions docs/Custom-Database-Provider/index.html

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions docs/Database-Viewer/index.html

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions docs/Errors/index.html

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions docs/FAQ/index.html

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions docs/FPS-Viewer/index.html

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions docs/Getting-Started/index.html

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions docs/Installation/index.html

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions docs/Log-Viewer/index.html

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions docs/Memory-Viewer/index.html

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions docs/Network-Inspector/index.html

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions docs/Route-Tracker/index.html

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions docs/Timeline/index.html

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions docs/Usage/index.html

Large diffs are not rendered by default.

Loading
Loading