AI生成Flutter UI代码实践(一)

之前的杂谈中有提到目前的一些主流AI编程工具,比如Cursor,Copilot,Trea等。因为我是Android 开发,日常使用Android Studio,所以日常使用最多的还是Copilot,毕竟Github月月送我会员,白嫖还是挺香的。

但是用过Cursor的也都知道它的强大,但是做Android开发还是不方便,需要两个工具来回切换使用。所以就在想写flutter应该不错,所以在早些时间就试了试,整体来说还是不错的。但是刚开始还是有些不习惯,整体效率没有明显提升,就搁置了。

后来受到启发,在想能否上传设计图给Cursor,让它帮我写UI。毕竟在我的经验里,UI的耗时基本占一个需求的60%左右,毕竟要还原设计稿,细节还是不少的,也需要不断适配调式。于是测试了一番,最近有了一些阶段性成果,整理分享一下,抛砖引玉。

测试页面

选了一个很简单的页面,试试水。公平起见,以下效果均是第一次生成的结果,不会尝试多次,挑选效果好的或是差的对比。

测试方案

Codia

figma插件,可以在figma上将设计稿转换为代码并导出。使用方法不做过多介绍,见官网

测试效果:

优点:

  • 使用方便,直接导出flutter项目,图片资源等都打包好。
  • 还原度高。页面大小,间距,颜色等信息都是正确的。

缺点:

  • 宽高和位置都是写死的(用的Stack + Positioned),导致代码几乎不可用。
  • 页面中的状态栏,底部的黑色小条当做页面内容生成了,比较傻瓜。
  • 不灵活,不能交互。例如图中的底部进度条都是图片。banner的部分也是图片一张,不能滑动。

Cursor + Claude 3.5

Cursor中上传UI页面的图片,提示词:根据图片,生成Flutter代码。

测试效果:

优点:

  • 生成的代码中各个控件位置不会写死。

缺点:

  • 还原度差的远,或许多次尝试会有好的。
  • 也无法获取页面中的切图,上面的人物图片是我自己替换的。

原因:figma插件掌握的信息更多,上传图片的方式只能靠ai识别图中信息,在间距,大小,颜色上都做不到不准确。

Cursor + Claude 3.7

后面更新了Claude 3.7,编程能力有所提升,所以我又试了一次。

效果:下图中最后一张是Claude 3.7生成的效果。

还原度有提升,但问题还是一样,颜色,圆角,大小,间距都是不对的。同时截止目前没有一个方案可以识别图中的轮播效果并实现。


以上是第一阶段测试,基于当时(25年2月20日)的工具和AI能力实现的。两种方案各有千秋,如果可以综合到一起那效果可以更好。

CodeParrot

地址:https://codeparrot.ai

VSCode插件,将figma页面地址粘贴进去,可以基于当前项目的主题,组件库去生成代码。

效果:

优点:

  • 可以获取页面信息,宽高大小等信息比较准确,自动切图。
  • 有一定还原度,代码灵活。例如这里的轮播效果实现了。

缺点:

  • 页面理解能力不强,比如状态栏和底部小条的处理。
  • 切图不准确(这个例子中是将图片和指示器一块切出,同时上传图片到它们的服务器上,这里用的图片是链接地址。。。)

但整体来说,又进步了一些。

Cursor + MCP + Claude 3.7

到这里就来到了本篇的重点。

前一阵Cursor支持了MCP,同时也有了大量的MCP工具出现。这次我使用到的是Figma-Context-MCP

配置好后如下图,它提供两个工具,一个是获取figma页面信息,一个是下载切图。这正是我们需要的。

使用方法也很简单,CursorAgent模式,填入figma地址,加上提示词。

第一轮测试

使用Cursor的好处是,可以帮我们将图片下载到对应的文件夹内并引用,包括轮播依赖的引用等。

左边这个是我第一次尝试时的效果,右边是第二次。差距这么大的一个原因是figma给到的信息是json,里面包含页面的层级,控件大小,颜色这些。一开始figma上页面的层级是不标准的,例如:按钮的文字和按钮不在一个组里面,指示器也一样。所以布局也就有概率混乱。

第二轮测试

后面调整了一下figma上的层级,每个组的命名也规范了。这样等于是给到了AI更多的信息。

重新生成了一下,效果:

左边是生成的效果,右边是我改了一下轮播区域比例后的效果。看的仔细的话,你会发现字体也是对的,之前其实都是默认字体。同时不知道是不是命名的关系,iOS底部的黑条(Home Indicator)也没有了。

其实上面的CodeParrot就是用调整后的设计稿生成的,所以轮播效果大概率也是因为这点才实现了。

第三轮测试

后面我看了一下代码,发现文字颜色,大小,字体,字重都是对的,但是间距,宽高这些还是有问题。看了一下figma给到的信息中是有宽高的,间距没有(其实也可以理解,毕竟间距是给相对概念,不太好给到)。但是这个mcp在简化json信息的时候去掉了宽高。所以我修改了源码,将控件宽高信息保留。测试效果如下:

我本身以为给到AI宽度会让它写死宽高,但实际上它自己会做识别(不稳定),在合适的地方使用。比如指示器就使用宽高,底部按钮就只使用高度。这个效果基本上改改已经可以用了。

不过这次顶部的渐变背景不见,字体也不对了。看来这块还是不稳定。

优点:

  • 可以获取页面信息,自动下载切图。
  • 还原度较高,代码灵活。
  • 自由组合,后面可以使用更优秀的模型或是MCP来提升效果。

缺点:

  • 要求设计对页面进行标准命名,分组。
  • 需要更多的配置(MCP,rules)

以上是第二阶段测试,基于当时(25年4月1日)的工具和AI能力实现的。目前来说Cursor + MCP是目前最理想的方案。同时以目前的情况看,大多数AI生成代码只能用figma,蓝湖目前没有接口,这方面差的远。

到此本篇结束,下一篇我会介绍进一步优化的方案及效果。很快,敬请期待~

相关推荐
提子拌饭13317 分钟前
风息时钟:鸿蒙Flutter 实现的自然风格时钟应用
flutter·华为·架构·开源·harmonyos
墨染天姬3 小时前
【AI】端侧AIBOX可以部署哪些智能体
人工智能
浮芷.3 小时前
Flutter 框架跨平台鸿蒙开发 - AR动物互动应用
flutter·ar·harmonyos
AI成长日志3 小时前
【Agentic RL】1.1 什么是Agentic RL:从传统RL到智能体学习
人工智能·学习·算法
2501_948114244 小时前
2026年大模型API聚合平台技术评测:企业级接入层的治理演进与星链4SAPI架构观察
大数据·人工智能·gpt·架构·claude
小小工匠4 小时前
LLM - awesome-design-md 从 DESIGN.md 到“可对话的设计系统”:用纯文本驱动 AI 生成一致 UI 的新范式
人工智能·ui
黎阳之光4 小时前
黎阳之光:视频孪生领跑者,铸就中国数字科技全球竞争力
大数据·人工智能·算法·安全·数字孪生
小超同学你好4 小时前
面向 LLM 的程序设计 6:Tool Calling 的完整生命周期——从定义、决策、执行到观测回注
人工智能·语言模型
智星云算力4 小时前
本地GPU与租用GPU混合部署:混合算力架构搭建指南
人工智能·架构·gpu算力·智星云·gpu租用
jinanwuhuaguo4 小时前
截止到4月8日,OpenClaw 2026年4月更新深度解读剖析:从“能力回归”到“信任内建”的范式跃迁
android·开发语言·人工智能·深度学习·kotlin