Flutter开发: Cursor, Windsurf还是Trae?

流行代理型 IDE 在 Flutter 开发中的并排比较.

首先, 为什么不选择 Copilot 或 Cline(或其他许多扩展)?

我认为分叉的 VS Code 方法更有效, 因为它允许将大型语言模型(LLMs)更好地集成到 IDE 中.

1. 背后的公司

Cursor

Anysphere 由四位(前)麻省理工学院学生于 2022 年创立. 2023 年, 他们推出了 Cursor. 迄今为止, 他们已筹集约 $1.7 亿美元. 这是一个蓬勃发展的故事.

但也许我们并不了解所有细节. 这就像讲述比尔·盖茨在车库里创立微软的故事, 却未提及他的母亲与 IBM 首席执行官是朋友.

Windsurf

该项目于2024年11月推出. 此前, 同一团队运营着Codeium------一个VS Code的 AI 扩展.

我未找到他们运营的企业名称(可能是Windsurf?), 但这已不再重要, 因为据报道, 2025年5月5日, Windsurf被OpenAI以$30亿收购.

有传言称他们曾试图收购Cursor, 但未能就价格达成一致.

这个价格在我看来毫无意义. 这些IDE背后几乎没有创新, 它们只是VS Code的分支, 且不拥有所使用的模型.

有人认为, 他们支付的是Windsurf已收集的数据, 以及在未来数据采集(用户提示, 上下文和接受的输出)方面领先竞争对手的可能性.

我不确定这是不是事实, 也不确定30亿美元真的易手了. 这笔"交易"看起来像是 AI 宣传的一部分.

Trae

Trae 是字节跳动(ByteDance)的新生儿, 这家中国公司创建了 TikTok, 更重要的是创建了 CapCut(我认为是世界上最好的视频编辑器)以及最近的 Lynx(一个非常有前途的跨平台框架).

在这里, "最好"的定义是强大且易于使用.

2. 定价

Cursor

Windsurf

免费层级

Cursor 和 Windsurf 均可完全免费使用. 但 Windsurf 通过积分限制用户访问高级模型, 而 Cursor 则不使用积分, 而是通过排队请求访问高级模型.

在免费层级, Cursor 提供 50 次慢速请求(我认为这是针对高级模型)和对免费模型的不限次请求: Cursor - small, Gemini - Flash, DeepSeek V3, GPT 4o mini 和 Grok 3 mini 测试版.

更新. 这是我从文档中获得的印象. 错误. 当我尝试使用 Claude-3.5-Sonnet 作为模型运行请求时, 系统提示在免费计划中应使用 Auto 选项(见下文)或 GPT-4.1.

Windsurf 每月提供 25 个免费积分(不同模型价格不同:docs.windsurf.com/windsurf/mo...%25E5%2592%258C%25E5%25AF%25B9%25E5%2585%258D%25E8%25B4%25B9%25E6%25A8%25A1%25E5%259E%258B%25E7%259A%2584%25E6%2597%25A0%25E9%2599%2590%25E8%25AF%25B7%25E6%25B1%2582%3ASWE-1 "https://docs.windsurf.com/windsurf/models)%E5%92%8C%E5%AF%B9%E5%85%8D%E8%B4%B9%E6%A8%A1%E5%9E%8B%E7%9A%84%E6%97%A0%E9%99%90%E8%AF%B7%E6%B1%82:SWE-1") Lite(自有模型)和 DeepSeek-V3.

专业版

Cursor:每月500次快速请求和无限次慢速请求至高级模型. 同时, 也可无限次请求免费模型.

Windsurf:每月500个积分, 并可额外购买250个积分($10). 同时, 也可无限次请求免费模型.

Trae

目前Trae完全免费.

是否包含对所有高级模型的无限访问权限?! 看起来确实如此!!

CapCut 曾经也免费了很长时间, 直到它占据了视频编辑软件市场的重要份额. 然后他们将许多基本功能设为付费.

有些人会说这是个糟糕的策略.

我认为这没问题. 我们只需意识到 Trae 也会发生类似情况.

更新:

Trae 推出了 Pro 版本, 并限制了免费版本对高级模型的访问权限.

3. 界面风格(主观)

鼠标指针

我不喜欢默认的 Cursor Dark Themes.

菜单, 文件和文件夹以及代理标签的控制项对比度非常差, 我无法清晰地看到它们.

Cursor

VS Code

但可以通过 Preferences->Settings->Themes 轻松更改. 我已将其改为 深色现代 选项. 对我来说看起来更好.

Windsurf

还算可以. 与 Cursor 类似.

Trae

外观和感觉好得多.

而 Windsurf 和 Cursor 看起来像是 VS Code 的廉价分支, 带有通过层层弹出窗口实现的代理功能, Trae UI 则在视觉和使用体验上都独树一帜.

4. Flutter 的金色灯泡

Cursor

在 Cursor 中无法正常工作. 解决方法是同时在 VS Code 和 Cursor 中打开项目.

Windsurf

按预期工作.

Trae

按预期工作.

5. 提供上下文

Cursor

Cursor相较于Copilot和其他扩展的优势在于其提供上下文的能力.

Cursor在这方面仍表现出色. 我们可以在请求中添加以下内容(除提示外):

  • 文件和文件夹
  • 代码片段
  • 文档(互联网单页)
  • Git(仓库 URL)
  • 以及更多...

之前曾有添加整个代码库的选项, 但已被移除且合理. 至少对于包含大量与正在开发的应用无关文件的 Flutter 项目而言, 这会让 LLM 感到困惑.

根据我的经验, 添加文件, 文件夹以及网页/本地文档就足够了.

Windsurf

Windsurf 基本上可以实现相同的功能, 但存在一些差异.

我们无法通过右键菜单添加网页链接, 而是需要在提示框中插入链接. 文档只是预定义的互联网资源集合. 我们无法像在Cursor或Trae中那样从URL创建文档.

我在Windsurf文档中未找到知识的含义及其使用方式. 看来文档有些过时.

Resources 指的是配置的MCP服务器资源.

在Windsurf中, 文件和文件夹需要逐个添加. 即你点击@, 然后点击Files , 然后输入文件名的后缀以过滤文件, 然后点击所需的文件------弹出窗口关闭. 要选择另一个文件, 你需要从头开始, 点击@等等...

因此, 如果你考虑从 Cursor 切换到 Windsurf------还是算了吧. 如果这些孩子连这个都做不好, 他们还能做什么?

Trae

Trae 在添加上下文方面与 Cursor 非常相似.

Doc 选项允许从提供的 URL 创建本地索引数据.

主要区别在于 Workspace 选项.

你可以使用 #Workspace 向 AI 助手询问整个 Workspace 的问题. 助手会自动在 Workspace 内搜索最相关的内容, 为其回复提供上下文. 此功能在遇到不熟悉的项目时特别有用, 因为它可以让你全面了解项目中实现的功能和代码, 帮助你快速掌握开发进度.

此功能仅在聊天模式下支持. 在构建模式下, 整个 Workspace 会自动作为上下文使用.

"整个 Workspace 会自动作为上下文使用" ------我不确定这是否是个好主意. Flutter 项目中包含大量与开发应用无关的文件, 这会让代理感到困惑. Trae 提供了两种避免文件被索引的方法:.gitignore 和特殊 .ignore 文件.

6. 索引代码库

所有三个 IDE 默认都会索引代码库, 并在执行请求时使用索引搜索代码库.

它们都提供了非常相似的方法来防止不必要的文件被索引.

.gitignore 中的文件和文件夹将不会被索引.

Cursor

此外, Cursor 使用具有相同语法的 .cursorignore 文件.

这是我的文件:

javascript 复制代码
/.dart_tool/
/.idea/
/android/
/ios/
/linux/
/macos/
/web/
/windows/
.gitignore
.metadata
getx_checkers_cursor.iml
pubspec.lock

在项目根目录添加 .cursorignore 后, 我们需要重新索引代码库:

Windsurf

Windsurf 使用 .codeiumignore 文件. 我未找到任何允许重新索引代码库的 UI 控件. 不好. 似乎重启 IDE 有帮助.

Trae

Trae 使用 .trae/.ignore 文件实现相同功能.

相关 UI 设计简洁美观:

遗憾的是, 它们未显示已索引文件的数量.

7. 模型

Cursor

以下是 Cursor 中可用的模型列表:

Auto-select 是推荐的默认选项, 这意味着模型将由 Cursor 根据当前负载 自动 选择.

Auto-select选中时, 无法得知实际使用的模型. 这不好. 如何比较模型?

Thinking选项会缩小模型选择范围, 仅保留最"智能"的模型.

Cursor-small 是 Cursor 的自建模型. 可能在 GitHub 上训练. 很可能基于 Llama. 他们未披露具体信息.

有关通过 Cursor 可用的模型更多信息, 请参阅 这里.

Windsurf

可用模型列表:

Trae

可用模型:

注意存在 Add Model 选项. 它允许使用你的私有 API 密钥添加自定义模型.

该列表不如Windsurf的列表令人印象深刻, 但所有模型均可免费使用. (!!!)

注意, DeepSeek-V3DeepSeek-R1 是由Trae自行托管(训练?)的.

8. AI规则

能够指定一些"AI规则"并将其包含在每个提示中非常有用.

Cursor

Cursor通过File->Preferences->CursorSettings->Rules->User Rules提供了实现此功能的方式.

还有 项目规则. 根据它们在请求中被包含的方式, 有几种类型:Always, Auto-attached, Agent-requested和Manual

对我来说有点太复杂了.

Windsurf

与 Cursor 类似, Windsurf也通过 File -> Preferences -> Windsurf 提供 GlobalLocal 规则.

此外, Windsurf还提供一种称为 Memories 的功能.

在对话过程中, Cascade 能够自动生成并存储记忆, 如果它遇到认为值得记住的上下文.

此外, 你可以随时让 Cascade 创建记忆. 只需提示 Cascade "创建关于...的记忆".

Cascade 自动生成的记忆与创建它们的 Workspace 相关联, Cascade 会在认为它们相关时检索它们. 在一个 Workspace 中生成的记忆在另一个 Workspace 中不可用.

Trae

Trae 允许创建用户(全局)和项目范围的规则. 注意其简单性和用户体验.

9. 代理模式

Cursor

Cursor有三个代理模式: Agent, Ask,Manual.

代理是 Cursor 的默认且最自主的模式, 设计用于在最小指导下处理复杂编码任务. 它启用了所有 工具, 可自主探索代码库, 阅读文档, 浏览网页, 编辑文件并执行终端命令以高效完成任务.

询问模式与其他默认模式(代理和手动)不同, 它默认不应用任何建议的更改------这使其成为一种"只读"模式, 能够完全读取文件和其他上下文, 但无法自行进行任何更改.

这对于学习一个你可能不希望进行更改的代码库, 或在实施之前与 AI 规划解决方案非常有用!

手动模式专为进行精准的代码修改而设计, 适用于你已明确知道需要修改的内容及位置的情景.

与代理模式不同, 它不会探索代码库或执行终端命令;其操作完全依赖于你提供的具体指令和上下文(例如通过 @ 提及文件).

我不明白为何需要单独的 手动 模式. 只需将一个文件或函数添加到上下文中并要求修复即可. 代理模式应能胜任.

看来开发者们不知道还能做些什么来保持差异化.

Windsurf

在 Windsurf 中, 代理被称为 Cascade(?😕).

Cascade 提供两种模式:写入模式和聊天模式.

写入模式允许Cascade创建并修改你的代码库, 而聊天模式则优化用于解答关于代码库或通用编码原则的问题.

Trae

Trae对代理的处理方式在哲学上更具合理性:

有一个非代理的聊天功能, 因为它不使用任何工具, 仅用于提问.

内置了两个代理: BuilderBuilder with MCP.

这提供了一种在不需要时不使用 MCP 服务器 的便捷方式.

10. MCP 服务器

如果你不熟悉 MCP 服务器, 请阅读MCP 简介MCP Server.

Cursor

Cursor 没有预配置的 MCP 服务器. 你需要手动在 File -> Preferences -> Cursor Settings -> MCP 中添加它们.

Windsurf

在 Windsurf 中, 我们也可以从Settings中添加 MCP 服务器:

但也可以使用插件:

看起来有两种实现相同功能的方式. 有点令人困惑. 不过, Windsurf 在 MCP 服务器方面更为先进.

Trae

Trae 提供两种代理模式:Builder 和 Builder with MCP.

服务器可通过市场添加到 Builder 中:

看起来与 Windsurf 的插件类似.

Trae 文档 指出, 要从 Trae 使用 MCP 服务器, 需要额外安装命令行工具(npxuvx). 这没什么大不了的.

Cursor 和 Windsurf 的文档中没有提到类似内容.

11. 构建跳棋游戏的实验

我创建了三个名称不同但代码相同的 Flutter 项目, 每个 IDE 各一个.

在每个 IDE 中, 我添加了相应的 .ignore 文件, 以防止 IDE 索引不必要的文件. (我希望被索引的唯一文件是 pubspec.yamllib 文件夹的内容. )

我创建(或通过 get_cli 生成的)以下空文件(或带基本模板的文件):

复制代码
cherckers_view.dart
checkers_controller.dart
checkers_model.dart
checkers_service.dart

并将所有这些文件添加到上下文中.

在每个 IDE 中, 我使用相同的全局(用户)规则:

vbnet 复制代码
My system is Windows. 
If not specified otherwise, we use Dart and Flutter with GetX framework.
Use MVVM architecture. Keep View to ViewModel relationships as one-to-one. Typical feature should be written using four classes/libraries: View,  ViewModel (GetxController), Model (data class(es)), and Service (class that contains logic). 
Prefer GetBuilder over Obx.
Always use named routes.
Use GetView<SomeController> instead of StatelessWidget. There is no need to create an instance of SomeController. GetView provides the controller getter.  
Don't use StatefulWidgets. Put disposable resources in controller.
Inject controller's dependencies thru contructor from Binding class.
Don't use functions to create widgets; use custom widget classes instead.
Method withOpacity(0.5) is deprecated.  Use withValues(alpha: 0.5) instead.
Never use FloatingActionButton. Replace with block (full-width) ElevatedButton.

在每个 IDE 中, 我使用相同的模型:Claude-3.5-Sonnet.

计划变更:Cursor不允许我在免费层级使用Claude-3.5-Sonnet . 因此我将使用GPT-4.1与每个IDE配合使用.

并且, 在每个IDE中, 我运行相同的提示:

sql 复制代码
Please, create checkers game where user can play against the program.

Cursor

请求的跳棋游戏已成功生成.

使用Cursor生成的跳棋游戏

所有代码均无错误或缺陷.

这里发布生成的代码没有意义, 对吧?😁 我们正在开启编写编程文章的新时代:发布提示而非代码.

代理详细解释了代码生成的所有步骤, 从生成模型开始, 接着是服务, 然后是控制器, 最后是视图.

Windsurf

虽然 Cursor 几乎瞬间就生成了输出结果, 但 Windsurf 却花了很长时间, 而且产生了大量无意义的输出:

这就是结果. (你还记得那 $30 亿美元吗?🤣🤣🤣)

哎呀. 真可惜.

不过, 至少它成功读取并理解了规则, 提示和上下文文件, 并生成了看起来正常(但无法运行)的代码.

Trae

到目前为止, 我最喜欢 Trae, 但其结果不如 Cursor 令人印象深刻.

第一次运行时, Builder 在生成模型后卡在 thinking... 状态, 最终显示请求失败的提示.

我尝试再次运行, 但遇到了代码库索引问题: 无法将文件夹添加到上下文中. 最终我逐个添加文件并运行请求.

Builder 再次卡在 thinking..., 但我一直在旁边, 点击了 Accept All , 然后在每个文件生成后再次点击 Accept All.

这样我们就完成了. 以下是结果:

你看到问题了. 程序没有优先处理"eating"而不是"moving". 这不是大问题, 可以轻松修复, 但 Cursor 还是更好.

12. 最后想法

这些代理 IDE 通常是简单的软件. 三者以非常相似的方式实现相同功能.

我更喜欢 Trae. 其 UI/UX 更佳, 且逻辑选择更直观易懂.

之前我曾将VS Code与Cursor配合使用(因为Cursor中的金色灯泡功能无法正常工作). 我将用Trae替换VS Code. 如果Trae的结果不令人满意, 我仍会保留Cursor作为备用方案进行二次核查.

我预计未来不久将有更多此类代理型IDE出现. 它们易于开发, 且对大型语言模型(LLM)提供商而言是宝贵资产, 因为它们能帮助收集数据.

相关推荐
你不会困2 小时前
怎么使用node+trae来实现前端自动打包部署
trae
小厂永远得不到的男人3 小时前
一个菜鸟程序员的真实体验:为什么我在国内用Trae更顺手?
程序员·trae
冬灵5 小时前
Trae AI,帮助你落地每一个有创意的想法🧩
trae
程序员爱钓鱼6 小时前
Go语言实战案例:使用sync.Map构建线程安全map
后端·go·trae
程序员爱钓鱼6 小时前
Go语言实战案例:使用Pipeline实现数据处理流水线
后端·go·trae
csdn_aspnet7 小时前
如何安装和使用 Cursor AI 编辑器
人工智能·cursor
围巾哥萧尘17 小时前
Trae AI Coding产品发展与Solo模式🧣
trae
围巾哥萧尘17 小时前
Trae solo 发展的三个阶段(1.0编码-1.5智能体-2.0前端自动化-2.5加载后端)
trae
飞哥数智坊18 小时前
AI编程实战:AI要独立开发了?TRAE SOLO 后端生成能力深度实测
人工智能·trae