Flutter DevTools
DevTools 里已经有网络视图、时间线、widget inspector 和内存分析器,而且它本身就是一个 由你自己机器提供的 Flutter web 应用。所以 Gitcito 一样都不重写,也不自己去跟 Dart VM Service 对话:它只是发现地址并把它嵌进来。

VM service 一起来,flutter run 就会打印这一行:
The Flutter DevTools debugger and profiler on iPhone 16 Pro is available at:
http://127.0.0.1:9100?uri=http://127.0.0.1:53412/uJ8k=/
启动会话会盯着自己的输出找它,调试工具栏上就会多出一个按钮。点一下,DevTools 就 开在仓库自己身上,成为它的一个图标,而不是一个单独的标签页。 一个会话一个图标 —— 同时跑两个应用,就是两个 DevTools。
热重启会公布一个新地址,只要会话还活着,面板就跟着换。会话结束之后,面板留着 最后那个地址,而它通常已经死了:关掉图标,从新的运行里重新打开 DevTools。
支持哪些工具
一个工具要进这张表,得做到两件事:在这台机器上提供一个网页界面,并且把地址打印出来。
| 工具 | 它打印的那一行 |
|---|---|
| Flutter DevTools | The Flutter DevTools … is available at: <url> |
Dart DevTools (dart devtools) |
Serving DevTools at <url> |
Vue DevTools (@vue/devtools) |
Vue Devtools … listening on <url> |
| Prisma Studio | Prisma Studio is up on <url> |
| Drizzle Studio | Drizzle Studio is up and running on <url> |
| webpack-bundle-analyzer | Webpack Bundle Analyzer is started at <url> |
| 其它任何提到 DevTools 和地址的输出 | 走通用匹配 |
什么嵌不进来,以及为什么。 Node inspector 打印的是给调试器挂上去的 ws://
端点,不是网页 —— 而跟它配套的 Chrome DevTools 前端住在 devtools:// 地址后面,
任何内嵌视图都不允许加载。React DevTools 的独立版本是它自己的桌面窗口,不是被
提供出来的网页。这两个都不能成为这里的标签页;它们要的是调试协议客户端,而不是
一个地址。
开发服务器不是开发工具。 :5173 上的 Vite 是你的应用,嵌进来那是预览面板 ——
另一个功能,这里刻意不做。
它被允许做什么
这个内嵌视图拴着短绳,因为这个应用手里有凭据:
- 只允许 loopback。
127.0.0.1、localhost、::1。用别的地址挂载会被拒绝, 跳转到别的地址同样会被拒绝。 - 没有 preload,没有 node integration,开启上下文隔离。 这个页面没有任何通往 Gitcito 的桥。
- 链接在你真正的浏览器里打开,用普通窗口,而不是在面板里。
限制
- 它就是 DevTools,不是我们的东西。 那个版本能做什么,面板就能做什么;它做不到 的,我们也做不到。没有什么 Gitcito 风味的网络视图。
- 只有 Flutter 会这样公布自己。 普通的 Dart 程序会打印 VM service 的 URL,但不会 打印 DevTools 地址,所以按钮不会出现。
- 面板空白说明应用已经停了。 DevTools 是正在运行的应用提供的;应用退出,地址 也就不再响应。
另见: 运行与调试