用AI写Flutter代码,是不是经常让你有一种在“给破房子贴胶带”的感觉?

修补匠与架构师的概念图

从只会修补bug的工匠转变为设计整体架构的架构师,是提示词优化的核心目标。

很多开发者在拥抱AI辅助编程时,都遭遇过同样的尴尬:代码报错了,丢给AI,它修好了这一行,结果跑了不久又崩在另一行;或者逻辑不通,AI只会给你打补丁,从来不会告诉你“这面墙其实该拆了重建”。

如果你也在为此烦恼,觉得AI写Flutter总是在“治标不治本”,那问题可能不在于AI不够聪明,而在于我们缺乏一套让AI遵循的“严苛规矩”。

今天咱们就来聊聊,如何通过制定规则(Rule)和优化提问方式,让AI从“修补匠”变成真正的“架构师”。

为什么AI总爱“打补丁”?

首先要给AI“平反”一下。目前的LLM(大语言模型)本质上是基于上下文预测下一个字的。当你只把一段报错代码丢给它时,它的视角往往非常局限——它看到的只是“这行代码不对”,而不是“整个组件结构不合理”。

它不知道你的项目架构是BLoC、Provider还是Riverpod,也不清楚你定的命名规范。在缺乏上下文和约束的情况下,它的最优解就是针对报错点做最小改动。这就导致了我们看到的“补丁地狱”。

解决方案:给AI戴上“紧箍咒”

想要从根源解决问题,必须强制AI按照你项目的高标准来工作。这里有几个亲测有效的实战技巧。

1. 喂给它官方“硬核”规范

不要指望AI天生就知道怎么写地道的Flutter代码,我们需要把“Effective Dart”和Flutter官方最佳实践直接塞给它。

你可以建立一个专门的Prompt文档,在每次对话前先发送这些内容,或者配置在IDE的AI助手指令中。核心要点包括:

  • Style Guide(风格指南): 强制命名规范(小驼峰、大驼峰)、格式化规则(使用 dart format)。
  • Documentation(文档注释): 要求所有public API必须有 /// 开头的注释,解释参数和返回值。
  • Usage(使用原则): 明确禁止使用 print(改用 debugPrintlogger),强制使用 const 构造函数来优化渲染性能。
  • 构造函数优先级: 明确告诉AI优先使用 const 构造函数,尽量使用初始化列表而不是在构造函数体内赋值。

示例Prompt片段:

“你是一位资深Flutter专家。在编写或修改代码时,必须严格遵守 Effective Dart 规范。所有公共变量和方法必须有文档注释。UI组件必须优先使用const构造函数以减少rebuild。禁止使用print,请使用logger包。”

2. 锁定状态管理模式,禁止越界

Flutter的状态管理百花齐放,但如果AI一会儿给你写个 setState,一会儿给你塞个 InheritedWidget,代码绝对是灾难。

解决方案: 明确告诉项目使用的技术栈,并禁止混用。

  • 明确指定: “本项目状态管理严格使用 Riverpod(或 Provider/BLoC),禁止混用 setState。”
  • 结构要求: 如果是BLoC,要求它必须区分 EventStateBloc;如果是Provider,要求它明确区分 StatefulWidgetStatelessWidget 的使用场景,并将逻辑尽可能抽离到 ChangeNotifier 中。

3. 分层架构的“铁律”

“打补丁”最大的原因往往是UI逻辑、业务逻辑和数据逻辑缠绕在一起。要强制AI进行分层。

你可以给AI定下这样的规则:

  • UI层(View): 只负责展示,不包含业务逻辑,不直接调用HTTP请求。
  • 逻辑层(ViewModel/Controller/Bloc): 处理业务逻辑,转换为UI能理解的状态。
  • 数据层(Repository): 只负责网络请求和本地缓存。

提问技巧升级:

与其问:“这段代码报错了帮我修一下”,不如问:

“请根据MVVM架构重构这段代码。UI层不应包含任何业务逻辑,请将网络请求移动到Repository层,状态更新交给ViewModel处理。”

这样,AI就不再是修bug,而是在帮你重构架构了。

实战:如何优雅地“纠错”

回到最初的问题,当你遇到AI只会打补丁的情况,试着改变你的提问策略:

  1. 询问根因: “这段代码的报错表面原因是X,但 architectural层面是否存在设计缺陷?请分析并给出重构建议。”
  2. 设定场景: “我正在编写一个高性能列表页面,请检查以下代码是否存在内存泄漏或不必要的rebuild,并按Flutter最佳实践进行优化。”
  3. 上下文注入: 在IDE中,尽可能让AI读取整个文件,甚至相关的依赖文件,而不仅仅是报错的那几行。现在的很多AI插件(如Cursor或Copilot)都支持Workspace Context,充分利用它。

一些常用的“防坑”Rule总结

最后,把这套可以直接复制去用的“防坑规则”总结一下,大家可以直接拿去训练自己的AI助手:

  1. UI代码分离: Widget的build方法必须是纯净的,任何耗时操作或异步逻辑都不允许出现在build里。
  2. 异步处理: 所有Future操作必须正确处理loading、error和success三种状态,不能只写成功逻辑。
  3. Key的使用: 涉及列表操作或Widget状态切换时,强制考虑是否需要使用Key来保持状态。
  4. 安全调用: 空安全必须严格执行,禁止使用 ! 强制解包,除非你能100%保证非空(即便如此,也要写出注释说明原因)。
  5. 代码拆分: 如果一个Build方法超过100行,或者是Widget的嵌套超过6层,强制要求AI进行拆分封装。

结语

AI写Flutter并不是简单的“一键生成”,它更像是一个极其听话但需要严格指导的实习生。它之所以总是打补丁,是因为我们要么没教它规范,要么没告诉它全局设计。

把这套“规矩”立起来,你会发现,它不仅能修bug,还能顺手帮你优化性能、重构架构。下次试试图中的这些招式,看看你的“Flutter AI搭子”能不能进化几成?

如果大家有自己独家的Flutter调教AI秘籍,欢迎在评论区分享,咱们一起在这个新工具上“降本增效”。

标签: none

AI Skills Smart Station on Nick Launches

评论已关闭