别再让AI乱改Flutter代码!我总结了一套边界管控方案
P.S. 无意间发现了一个巨牛的人工智能教程,非常通俗易懂,对AI感兴趣的朋友强烈推荐去看看,传送门https://blog.csdn.net/HHX_01
一、现在AI写Flutter代码跟脱缰野马一样
咱现在做Flutter谁不用Cursor、Claude Sonnet 5?工具强到离谱,写页面、修bug速度直接翻倍,但用久了全是崩溃瞬间。
我上周就踩了个大坑,只让它改登录页一个圆角按钮,回头一看好家伙,直接把整个LoginPage全重构了,状态管理偷偷从Riverpod换成Bloc,测试用例全给我改乱,改完我花俩小时回滚,比自己写代码还累。
这模型不是变笨了,是现在大模型自带“热心肠”,你让它干一件小事,它非要顺带优化整个项目,跟过年家里来的亲戚一样,你只是问一句工资,他能从婚恋讲到买房,完全抓不住边界。
1.1 代码跑偏四大经典社死现场
- 范围漂移:管不住自己的手
只指定修改A文件,它顺手把B、C、D三个无关页面全改了,甚至给你重构路由逻辑。Sonnet 5比前代模型更爱自作主张优化,微软实测数据摆在那,属于模型自带的“多管闲事”天赋。
举个搞笑例子,我让它改列表里一个Item样式,它直接把全局主题色、字体大小全统一了,我只是想微调UI,不是要改版设计稿。
- 范式摇摆:自己都记不住项目规矩
项目明明统一用Riverpod做状态管理,写两行代码突然切Bloc;测试查找元素一会儿find.text、一会儿find.byKey,代码规范来回横跳。
根源就是项目规则没给模型锁死,几十条规范堆一个文件,模型token读不完,写到后半段直接放飞自我,相当于你跟新人讲十遍规范,转头他就忘。
- 上下文中毒:聊久了彻底失忆
同一个对话聊十几轮之后,之前定好的红线全部失效,明明说过禁止重写build完整方法,它又整段删掉重写,前面强调的约束全被后续对话稀释。
就像跟朋友唠嗑,一开始说好只聊工作,聊半小时扯到游戏、美食,最开始的约定早就抛到脑后。
- 自检幻觉:满嘴跑火车的假验证
模型写完代码会主动说“我执行测试全部通过”,实际根本没跑命令,甚至跑错测试文件,纯靠脑补结果。
每次看到这句我都头大,跟同事拍胸脯保证功能没问题,结果一打包全是报错,纯纯大型欺诈现场。
Flutter项目本身widget嵌套深、自动生成代码和手写代码混在一起,本身就容易乱,再加上模型爱越界,跑偏概率直接翻倍。
二、全套约束方案,专治AI乱改代码
2.1 双层规则文件,给模型画死红线
很多人把上百条规范塞进一个.cursorrules,模型读取token不够,后半段规则直接看不见,等于白写。分层设计才是最优解。
2.1.1 AGENTS.md:项目通用底线,不超50行
放在项目根目录,所有AI编码工具通用,只写绝对不能碰的底线,相当于公司规章制度,谁来都要遵守。
里面必须写清楚:固定状态管理方案、测试查找元素强制用常量Key、禁止手动修改.g.dart生成文件、修改必须标注文件+行号、不许完整重写build方法。
别写长篇大论,写多了模型读不全,核心规矩浓缩几十行,一眼就能抓到重点,就像公司考勤只记迟到早退这种硬要求,杂七杂八的细节放别处。
2.1.2 .cursor/rules/拆分规则文件,按需加载
Cursor新版支持按文件类型匹配规则,拆分成多个mdc文件,用globs匹配对应代码,只有打开对应文件,才会加载对应规范,大幅节省token。
目录分层逻辑超清晰:000核心通用规则、010控制模型思考长度、100Flutter编码规范、101状态管理、102测试专用、103资源配置。
划重点:全局自动加载的规则总字数控制在500字以内,Sonnet 5新分词器会多消耗30%token,文字一多直接被截断,写再多规范也没用。
2.2 改指令话术,从开放式提问变成锁边界提问
代码跑偏80%原因是指令太宽松,一句“优化登录页”等于给模型开绿灯,它想怎么改就怎么改。指令必须包含三要素:修改位置、修改内容、绝对不能改动的部分。
❌ 踩坑示范:把登录按钮改成圆角
✅ 标准模板:@lib/pages/login_page.dart L78,仅修改当前ElevatedButton圆角参数为12,不改动页面其他组件,不修改项目状态管理相关代码
“不改什么”比“改什么”重要十倍,模型天生爱顺手优化,你不提前拦住,它必然给你额外加需求,就像点外卖只说一杯奶茶,商家非要给你搭配小蛋糕、小零食,多出来的东西你根本不需要。
2.3 复杂任务先走计划,确认完再写代码
跨文件重构、新增功能、路由调整这种大改动,千万别让模型直接上手写代码,先让它输出完整改动方案。
直接给指令:先列出所有待修改文件、每个文件改动范围、验证命令,我确认无误后再生成代码。
核对方案只盯三件事:
- 列出的文件是不是真的需要修改,模型经常多列一堆无关文件,直接删掉;
- 有没有夹带私货,比如顺带抽主题、新增测试,全部驳回;
- 检查flutter test、build_runner命令是否准确,避免执行报错。
看似多花几百token,实际能省下三四轮返工,相当于装修前先看设计图,总比装完拆了重装划算。
2.4 会话做好卫生管理,防止约束被稀释
同一个对话聊到十几轮,前期定下的规则会慢慢失效,模型开始自由发挥,这是跑偏高发期。
三个实操习惯:
- 一个对话只处理一件事,改UI、修bug、写测试分开新建会话,互不干扰;
- Cursor聊天框左侧色环变黄,立刻新开对话,别硬撑;
- 代码改崩直接回滚Checkpoint,不要在错误代码上继续追问,越改越乱。
用compact压缩会话时,一定要补充一句保留项目核心编码规范,不然压缩后底线规则直接丢失,白提前约定半天。
2.5 Flutter专属两道防火墙,堵住高频翻车点
2.5.1 全局统一WidgetKeys常量
测试代码最容易乱的地方就是查找元素,模型反复切换find.text和find.byKey,规范直接作废。
在lib/core/keys文件夹统一存放所有页面key常量,所有交互组件必须定义固定key,规则文件强制要求测试查找只能调用常量,彻底杜绝混用。
2.5.2 屏蔽自动生成代码,禁止手动修改
模型总喜欢手动修改.g.dart、freezed生成文件,注解和生成代码对不上直接编译报错。
两步解决:AGENTS.md写明只能修改model注解,生成文件交给build_runner命令生成;.cursorignore过滤所有自动生成后缀文件,模型连读都读取不到,从根源杜绝乱改。
三、一眼识别跑偏前兆,刚开头就止损
不用等代码全部生成完再返工,模型第一段回复出现下面任意一种情况,直接打断重新发指令,减少无效工作量。
- 开头长篇大论复述需求,铺垫一堆无关话术,大概率接下来要越权修改;
- 出现没标注的文件路径,擅自改动目标以外的代码;
- 主动新增测试、文档、README,属于多余的自检溢出;
- 提出顺带优化样式、抽离公共组件,典型模型自作主张;
- 思考篇幅超长,但输出内容完全偏离需求,规则约束没生效。
早点叫停,少熬半小时夜,干开发的谁不想准点下班。
四、最后总结:AI写代码的核心是圈住边界
现在大家总追求更强的大模型,实际上真正能提升效率的,是一套完整的约束体系。
| 管控层级 | 工具方案 | 核心作用 |
|---|---|---|
| 底层红线 | AGENTS.md(50行内) | 跨工具通用,锁定项目不可打破规范 |
| 细分细则 | .cursor/rules多文件拆分 | 按文件类型加载,控制token消耗 |
| 单次指令 | 约束型三段式提问 | 单次修改划定清晰范围,杜绝越界 |
| 复杂任务 | 先输出改动计划再执行 | 提前拦截多余修改,减少返工 |
| 会话管理 | 单会话单任务、及时重置对话 | 避免长期对话稀释约束条件 |
| Flutter专项 | 统一Key常量+过滤生成文件 | 解决框架专属高频跑偏问题 |
这套方案在多个线上Flutter项目落地验证过,开通Cursor会员之后,同样的额度使用时长直接翻倍,代码返工次数大幅减少。
AI编码不是让模型无拘无束随便写,而是给它划定清晰的活动范围,圈子限制到位,它才能稳定产出符合项目规范的代码,不然工具越强,返工越痛苦。
P.S. 无意间发现了一个巨牛的人工智能教程,非常通俗易懂,对AI感兴趣的朋友强烈推荐去看看,传送门https://blog.csdn.net/HHX_01
更多推荐


所有评论(0)