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,蓝湖目前没有接口,这方面差的远。

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

相关推荐
h64648564h15 分钟前
CANN 性能剖析与调优全指南:从 Profiling 到 Kernel 级优化
人工智能·深度学习
数据与后端架构提升之路17 分钟前
论系统安全架构设计及其应用(基于AI大模型项目)
人工智能·安全·系统安全
忆~遂愿20 分钟前
ops-cv 算子库深度解析:面向视觉任务的硬件优化与数据布局(NCHW/NHWC)策略
java·大数据·linux·人工智能
Liue6123123124 分钟前
YOLO11-C3k2-MBRConv3改进提升金属表面缺陷检测与分类性能_焊接裂纹气孔飞溅物焊接线识别
人工智能·分类·数据挖掘
一切尽在,你来32 分钟前
第二章 预告内容
人工智能·langchain·ai编程
23遇见36 分钟前
基于 CANN 框架的 AI 加速:ops-nn 仓库的关键技术解读
人工智能
Codebee1 小时前
OoderAgent 企业版 2.0 发布的意义:一次生态战略的全面升级
人工智能
光泽雨1 小时前
检测阈值 匹配阈值分析 金字塔
图像处理·人工智能·计算机视觉·机器视觉·smart3
Σίσυφος19001 小时前
PCL 法向量估计-PCA邻域点(经典 kNN 协方差)的协方差矩阵
人工智能·线性代数·矩阵
小鸡吃米…2 小时前
机器学习的商业化变现
人工智能·机器学习