SuperAPI AI 工具集

loom-dart

编程与开发

查看项目

更新于 10-18 22:15

技能介绍

用途:本技能面向已经掌握 Dart 语法的开发者,提供 Dart 3 与 Flutter 的惯用写法与易错点参考,目标是产出可直接用于生产环境的代码。资料本身说明其价值在于指出“容易做错”的地方,如未 await 的 Future、不会发生类型提升的公开字段、await 之后仍使用 BuildContext、在 build 中创建 Future、Isolate 消息复制,以及按子串匹配的测试过滤。

工具链:dart(Flutter 项目用 flutter)同时充当构建工具、包管理器、格式化器、分析器与测试运行器。资料列出常用命令:dart create -t package spool 或 flutter create --template=package spool 创建包;dart pub add path / dart pub remove path 增删依赖;dart pub add dev:test 添加开发依赖;dart pub get 解析依赖(CI 中可用 --enforce-lockfile);dart pub outdated、dart pub upgrade --major-versions 检查与升级;dart format . 格式化;dart analyze --fatal-infos 分析;dart fix --apply 自动修复;dart run build_runner build --delete-conflicting-outputs 代码生成;dart test / flutter test 测试;dart compile exe bin/spool.dart -o spool 编译原生二进制。建议用 dart pub add 让 pubspec.yaml 与 pubspec.lock 保持一致,应用应提交 pubspec.lock。3.6+ 支持 workspace 单仓多包,共享一次依赖解析与一个锁文件;.g.dart、.freezed.dart 由 build_runner 生成,不可手动编辑。分析配置可启用 strict-casts、strict-inference、strict-raw-types 及 unawaited_futures 等规则,标准校验为 format 检查、analyze、test 三步。

主要能力与易错点:空安全方面,非空类型除非标为 T? 否则不可为 null;空值检查后的类型提升只对局部变量、参数及 3.2+ 的私有 final 字段生效,公开字段与 getter 不会提升,应先复制到局部变量;! 是运行时未检查断言;late 读取前未赋值会抛 LateInitializationError;必填命名参数应标 required。类型方面,sealed 类使 switch 穷尽;类修饰符表达意图(final、base、interface、mixin class);记录可返回值元组并按值比较;模式可在一步中校验并解构 JSON 等未定型数据;extension type(3.3)以零运行时成本包装表示类型。错误处理区分 Exception(预期失败)与 Error(程序缺陷),建议 on FormatException catch (e, st) 按类型捕获,rethrow 保留堆栈,转换错误时用 Error.throwWithStackTrace。异步方面需 await 每个 Future 或用 unawaited(...) 明示;记录上的 (a, b).wait 并发执行并抛 ParallelWaitError;Stream 默认单订阅,多监听需 StreamController.broadcast();应取消订阅并关闭控制器;async* 在订阅者暂停时于 yield 处暂停,天然提供背压。Isolate 各有独立堆与事件循环,消息会被复制;Isolate.run 适合会阻塞 UI 或服务端事件循环的计算,闭包只应捕获纯数据。

Flutter 要点:widget 是不可变配置,const 构造函数可跳过重建;setState 只包裹同步修改;await 后操作 context 或 setState 前检查 mounted;Future 与 Stream 应在 initState 创建而非 build;在 dispose 中释放控制器、焦点节点、动画控制器与订阅;可移动列表项给 ValueKey;小应用可用 ValueNotifier/ChangeNotifier 配 ListenableBuilder,遵循项目已有状态管理方案不混用;大 build 方法拆成小 widget 类。

测试:package:test 提供 test、group、setUp、tearDown、addTearDown 与匹配器,flutter_test 增加 testWidgets 与 WidgetTester;示例使用 mocktail 模拟客户端并校验调用。异步测试返回 Future 即可被等待;pumpAndSettle 遇到无限动画(如 CircularProgressIndicator)会超时,应改用 pump(duration);golden 测试在不同操作系统字体渲染不同,应在同一平台生成与比较。常用参数包括 --name、--plain-name、-t/-x、-p chrome、--reporter expanded 及覆盖率选项。

使用方式(Loom 适配器):适配器为 dart-test 与 flutter-test;含 pubspec.yaml 的目录视为 dart 包,pubspec.yaml 依赖 flutter 时选 flutter-test,否则选 dart-test,可用 loom project detect 确认。单测命令为 dart test {file} --plain-name '{test}' 或 flutter test {file} --plain-name '{test}',其中 test 为测试描述,--plain-name 按由 group 描述与测试描述以空格连接成的全名字串做子串匹配。无匹配时 dart test 退出码 79、flutter test 退出码 1。契约测试应放在 test/ 下并以 _test.dart 结尾;描述在全文件中须唯一,避免包含撇号(值会代入单引号 shell 参数);写契约前先运行 pub get,以确保冻结运行在 300 秒限制内完成;.dart_tool/ 须加入 .gitignore。按影响选择测试时,loom 会把文件合并为一条命令(dart test f1 f2)。

适用场景与限制:适合需要 Dart/Flutter 惯用写法、空安全、异步与 Isolate、widget 生命周期及测试配置参考的开发与评审工作。资料未提供该技能的收费、价格、平台支持范围等商业信息;除上述命令与规则外的功能暂未提供。