哈喽,我是老刘
你敢信吗?
开发者在升级Dart 3.9.0后,集体"翻车"了!
Google IO大会宣传的dart mcp server功能居然不能用。
使用AI助手调用dart mcp server功能,会返回如下错误:
swift
It seems you need to update your Dart SDK. The required version is 3.9.0-163.0.dev or greater.
什么鬼?
我去github上看了下,3.9.0应该是这个系列最终的正式版,理论上版本号比3.9.0-163.0.dev要高。
正好,在github上看到还有最新的3.10.0版本,那就升级到3.10.0试试。
还是不行!
这波操作真的是把程序员们整不会了。
好家伙,这好像没经过测试就发布了。
如果你也踩过这个坑,那你绝对不是一个人在战斗。
今天老刘就来给大家扒一扒,这个让无数开发者抓狂的bug到底是怎么回事,以及如何优雅地解决它。
问题原因分析
说实话,刚开始遇到这个问题的时候,我也是一脸懵逼。
明明版本号都对了,为什么还是报错?
深入研究了GitHub上的issue后,我终于找到了问题的根源。
核心问题:URI类型搞混了!
原来,当我们给LLM传递的URI实际上是一个VM(虚拟机)服务URI,而不是DTD(Dart Tooling Daemon)URI时,就会出现这个诡异的错误。
什么意思呢?
简单来说,Dart的开发工具链中有两套不同的服务体系:
VM Service URI: 这是Dart虚拟机提供的调试接口,主要用于性能分析、内存监控等底层操作。
DTD URI: 这是Dart Tooling Daemon提供的工具链接口,专门为IDE和外部工具设计的高级API。
AI助手调用dart mcp需要的是DTD URI,但是LLM在默认情况下拿不到DTD Uri,只能获取到VM Service URI。
这就像你拿着银行卡去刷地铁,卡是真的,钱也够,但就是刷不了。
理论上来说这是Dart工具链的一个bug,没有把整个环节打通。
老刘个人猜测是为了赶发布时间没有充分测试。
更深层的问题在于错误提示的逻辑缺陷
在不同的异常处理流程下没有从底层反馈并捕获正确的异常信息,给使用者有效的提示。
所以老刘自己浪费了不少时间去测试3.10版本,但是其实这个问题和版本没有任何关系。
别慌!一招让Dart MCP重新为你打工
既然知道了问题的根源,解决方案其实很简单。
核心思路就是:获取DTD URI,然后传递给LLM
具体操作步骤如下:
第一步:启动Flutter项目并获取DTD URI
给Flutter默认的执行命令添加一个参数:
bash
flutter run --print-dtd
注意这里的关键参数是--print-dtd
,不是普通的flutter run
。
运行后,终端会输出类似这样的信息:
csharp
A Dart VM Service on sdk gphone64 x86 64 is available at: http://127.0.0.1:13876/2I5k4Otig48=/
The Dart Tooling Daemon is available at: ws://127.0.0.1:13879/IkY5qdOwSQ0=
The Flutter DevTools debugger and profiler on sdk gphone64 x86 64 is available at:
http://127.0.0.1:9101?uri=http://127.0.0.1:13876/2I5k4Otig48=/
这个"ws://..."就是真正的DTD Uri了。
第二步:让LLM读取正确的Uri
这里要注意,我们需要的是DTD URI,也就是ws://127.0.0.1:9394/ws
这个地址。
不要搞混了Dev Tools URL,那个是给浏览器用的。
另外这里也不需要手工的给LLM复制粘贴,只要在提示词中告诉LLM从正确的位置获取DTD URI,然后我们试一下。
看到已经成功连接到MCP了。
甚至老刘测试过,即使不加任何提示词,只要Flutter项目编译过程中打印出DTD URI,LLM大概率就会自动读取到正确的URI。
第三步:让Dart MCP工作
可以直接要求LLM获取当前的组件树,效果如下:
当然你也可以做更多的事情,比如让LLM基于这个mcp进行代码调试等等。
总结
说实话我觉得这个bug是Dart工具链的一个设计缺陷,没有从底层反馈并捕获正确的异常信息,给使用者有效的提示。
或者说是发布的太仓促,没有经过充分的测试,导致这个问题暴露出来。
好了,本文算是帮大家扫清一个障碍,下一篇文章会系统的介绍Dart MCP Server的使用方法。
如果看到这里的同学对客户端开发或者Flutter开发感兴趣,欢迎联系老刘,我们互相学习。 私信免费领老刘整理的《Flutter开发手册》,覆盖90%应用开发场景。 可以作为Flutter学习的知识地图。
------------ laoliu_dev