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
2 changes: 2 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -108,10 +108,12 @@ Notes / 说明:
- [ ] `README_zh.md`: same spots as `README.md` (`^X.Y.Z`, `` `X.Y.Z` `` placeholder, `ref: release/vX.Y.Z`, and the "🔔 推荐升级:" callout). The callout should briefly summarize what the current release changed and recommend the latest version; it must not reference previous versions.
- [ ] `website/pages/*.md`: the install snippet uses the `__ZIK_VERSION__` placeholder; it is auto-filled from `pubspec.yaml` by `website/scripts/sync-docs.mjs`, so bumping `pubspec.yaml` alone is enough (do NOT hardcode a version there).
- [ ] `CHANGELOG.md`: add a new `## X.Y.Z` section at the top describing the changes.
- **Changelog scope rule / 变更日志范围规则:** Only changes to `lib/` (i.e. published-package runtime behavior) earn a CHANGELOG entry. Pure documentation updates (`README*.md`, `website/`, `docs/`) and `example/` changes must NOT get a CHANGELOG entry — they do not change the released package's runtime behavior. The single exception is a **pure version-bump commit**: bumping the version legitimately updates the CHANGELOG (and the doc version strings) as part of cutting the release, which is allowed. / 只有 `lib/` 的改动(即已发布包的运行行为)才进 CHANGELOG;纯文档(`README*.md`、`website/`、`docs/`)与 `example/` 的改动不应写进 CHANGELOG——它们不改变发布包的运行行为。唯一的例外是「单纯 bump 版本」的提交:为发版而更新 CHANGELOG(及文档版本号)是允许的。
- Grep sanity check before committing: `grep -rn "old_version" README.md README_zh.md website/pages` must return NOTHING (only legitimate historical prose may remain; the `__ZIK_VERSION__` placeholder is expected and is not a real version).
**Website (Nextra docs site):** `website/` is built and synced to `docs/` automatically by the `pre-commit` hook (`website/scripts/sync-docs.mjs`). Version references in `website/pages/*.md` use the `__ZIK_VERSION__` placeholder, which is filled from `pubspec.yaml` at build time — bumping `pubspec.yaml` propagates to the site automatically. Never edit `docs/` by hand; it is regenerated on every commit that touches `website/`.
2. Update `README.md` / `CHANGELOG.md` as needed.
3. Locally verify before pushing:
- `dart format .` — must report no changes. The `dart-format-fix.yml` CI workflow auto-commits any formatting diff back to the PR branch, so keep the tree formatted locally to avoid surprise commits.
- `flutter analyze` — must pass with no errors.
- `flutter test` — all unit tests green.
- `flutter pub publish --dry-run` — confirm the package scores well on `pana` and no files are unintentionally excluded.
Expand Down
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,22 @@
# Changelog

## 1.7.2

### Changed / 变更
- 优化 UI 刷新节流:改用 `addPostFrameCallback` 合并通知,去掉每帧 `new Timer()`,避免密集更新时丢通知。 / Optimized UI refresh throttling: notifications are now coalesced via `addPostFrameCallback` instead of per-frame `Timer`s, eliminating dropped updates under heavy load.
- 内存查看器不再每 500ms 全量重绘整页,非趋势卡片仅在开关 / VM 状态变化时刷新。 / The Memory viewer no longer rebuilds the entire page every 500ms; non-trend cards refresh only on toggle / VM-state changes.
- 网络 / 日志查看器过滤结果记忆化,避免每次通知做全表遍历。 / Network / Log viewer filter results are now memoized, avoiding a full-list scan on every notification.

### Fixed / 修复
- WebSocket 握手不再进网络列表:此前因 `WebSocket.connect` 在 `openUrl` 阶段已把 `wss://` 转成 `https://`,基于 URL scheme 的判定恒为 false,握手被当普通 GET 登记、失败握手漏成网络列表里 `OS Error status -1` 的 GET。现由 `InspectorWebSocket.connect` 用 `runZoned` 标记握手连接,拦截器据此跳过原始 HTTP GET 记录;socket.io、graphql-ws 等端点也不会被完整抓取而泄露鉴权信息,抓取开启时改由 `WsInspectorService` 以 `WS` 条目呈现。 / WebSocket handshakes are no longer logged as plain requests: `WebSocket.connect` rewrites `wss://` to `https://` before `openUrl`, so the previous scheme-based check always failed and handshakes (and failed ones) leaked into the Network list as `OS Error status -1` GETs. `InspectorWebSocket.connect` now flags the handshake via `runZoned`, and the interceptor skips the raw HTTP GET; endpoints like socket.io / graphql-ws are no longer captured wholesale (no auth-token leaks), and when capture is on the frames appear as a `WS` entry instead.
- `HttpOverrides` 改为链式包裹宿主已有 overrides,不再静默覆盖。 / `HttpOverrides` now wraps any existing overrides instead of silently replacing them.
- 请求体设全局内存预算,超阈值只保留截断预览,降低大下载场景的内存峰值。 / Request bodies now respect a global memory budget; over-budget bodies keep only a truncated preview.
- Dio 并发同 URL 请求的响应匹配更可靠,避免错配。 / More reliable Dio response matching for concurrent same-URL requests.

### Added / 新增
- 公开导出更多能力(内存 / 告警服务、Widget 树服务等)以便外部直接引用。 / Exported additional public capabilities (memory / alert services, widget-tree service, etc.) for direct external use.
- 路由注入降级时打印一次调试警告,便于排查路由追踪失效。 / Route-injection fallback now prints a one-time debug warning when it degrades.

## 1.7.1

### Changed / 变更
Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ A powerful Flutter plugin for an in-app developer console, providing real-time d
[![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 refreshes the inspector UI with a neutral graphite + teal palette (no gradients or glow), monospaced data text (URLs, status codes, JSON, logs, memory bytes, FPS numbers), and 2px left bars on error/warning rows; it also tightens the README language-switch header. All users are encouraged to upgrade to the latest version (`^1.7.1`).
> **🔔 Upgrade recommended:** This release optimizes performance and robustness — smarter UI refresh throttling (no dropped updates), lighter rebuilds in the Memory / Network / Log viewers, more accurate WebSocket detection (no token leakage into plain requests), safe chaining of an existing `HttpOverrides`, bounded request-body memory, and more reliable Dio response matching. All users are encouraged to upgrade to the latest version (`^1.7.2`).

🌐 **[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 @@ -68,7 +68,7 @@ A powerful Flutter plugin for an in-app developer console, providing real-time d

## Screenshots

> Click any thumbnail to open the full-size image. / 点击任意缩略图可查看原图大图。
> Click any thumbnail to open the full-size image.

| Network Inspector | Database Viewer |
| --- | --- |
Expand All @@ -94,7 +94,7 @@ A powerful Flutter plugin for an in-app developer console, providing real-time d

```yaml
dependencies:
zero_inspector_kit: ^1.7.1
zero_inspector_kit: ^1.7.2
```

### GitHub
Expand All @@ -104,7 +104,7 @@ dependencies:
zero_inspector_kit:
git:
url: https://github.com/zero-labsco/zero_inspector_kit.git
ref: release/v1.7.1 # replace 1.7.1 with the version you need
ref: release/v1.7.2 # replace 1.7.2 with the version you need
```

---
Expand Down
8 changes: 4 additions & 4 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)

> **🔔 推荐升级:** 本次更新重做检查器 UI:采用中性石墨灰 + Teal 配色(移除渐变与光晕),数据文本(URL、状态码、JSON、日志、内存字节、FPS 数字)改用等宽字体,错误/告警行加 2px 左侧色条;并收紧 README 语言切换头部间距。建议所有用户升级到最新版本(`^1.7.1`)。
> **🔔 推荐升级:** 本次更新聚焦性能与健壮性优化:更智能的 UI 刷新节流(不再丢失更新)、内存 / 网络 / 日志查看器更轻量的重建、更准确的 WebSocket 识别(避免 token 泄漏到普通请求)、安全串联宿主已有的 `HttpOverrides`、请求体内存占用设上限,以及更可靠的 Dio 响应匹配。建议所有用户升级到最新版本(`^1.7.2`)。

🌐 **[官方网站](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 @@ -67,7 +67,7 @@

## 截图

> 点击任意缩略图可查看原图大图。/ Click any thumbnail to open the full-size image.
> 点击任意缩略图可查看原图大图。

| 网络检查器 | 数据库查看器 |
| --- | --- |
Expand All @@ -93,7 +93,7 @@

```yaml
dependencies:
zero_inspector_kit: ^1.7.1
zero_inspector_kit: ^1.7.2
```

### GitHub
Expand All @@ -103,7 +103,7 @@ dependencies:
zero_inspector_kit:
git:
url: https://github.com/zero-labsco/zero_inspector_kit.git
ref: release/v1.7.1 # 将 1.7.1 替换为你需要的版本号
ref: release/v1.7.2 # 将 1.7.2 替换为你需要的版本号
```

---
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-ec27bf27c476d146.js" defer=""></script><script src="/zero_inspector_kit/_next/static/chunks/pages/_error-7a92967bea80186d.js" defer=""></script><script src="/zero_inspector_kit/_next/static/FghFelPE1B220PHNNA2kw/_buildManifest.js" defer=""></script><script src="/zero_inspector_kit/_next/static/FghFelPE1B220PHNNA2kw/_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":"FghFelPE1B220PHNNA2kw","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-ec27bf27c476d146.js" defer=""></script><script src="/zero_inspector_kit/_next/static/chunks/pages/_error-7a92967bea80186d.js" defer=""></script><script src="/zero_inspector_kit/_next/static/QFHN3HXYX52PsOUJyWLEl/_buildManifest.js" defer=""></script><script src="/zero_inspector_kit/_next/static/QFHN3HXYX52PsOUJyWLEl/_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":"QFHN3HXYX52PsOUJyWLEl","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-ec27bf27c476d146.js" defer=""></script><script src="/zero_inspector_kit/_next/static/chunks/pages/_error-7a92967bea80186d.js" defer=""></script><script src="/zero_inspector_kit/_next/static/FghFelPE1B220PHNNA2kw/_buildManifest.js" defer=""></script><script src="/zero_inspector_kit/_next/static/FghFelPE1B220PHNNA2kw/_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":"FghFelPE1B220PHNNA2kw","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-ec27bf27c476d146.js" defer=""></script><script src="/zero_inspector_kit/_next/static/chunks/pages/_error-7a92967bea80186d.js" defer=""></script><script src="/zero_inspector_kit/_next/static/QFHN3HXYX52PsOUJyWLEl/_buildManifest.js" defer=""></script><script src="/zero_inspector_kit/_next/static/QFHN3HXYX52PsOUJyWLEl/_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":"QFHN3HXYX52PsOUJyWLEl","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/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/Usage/index.html

Large diffs are not rendered by default.

Loading
Loading