字符串管理¶
1、目录结构¶
lib/
├─ builder.dart # 给 build_runner 用的工厂入口(固定)
│
├─ src/
│ └─ l10n/
│ └─ gift_strings_generator.dart # 生成逻辑(工具代码),真正的 generator 实现
│
├─ modules/
│ └─ gift/
│ └─ l10n/
│ ├─ gift_strings.yaml # 你需要维护的唯一配置
│ ├─ gift_strings.g.dart # 自动生成的产物,不要手改
│ └─ gift_strings.dart # 业务入口(export),业务只 import 这个
│
└─ main.dart
build.yaml
pubspec.yaml
2、build.yaml¶
builders:
gift_strings:
import: "package:flutter_01/builder.dart"
builder_factories: ["generator"]
build_extensions: {".yaml": [".g.dart"]}
auto_apply: root_package
build_to: source
targets:
$default:
builders:
flutter_01|gift_strings:
generate_for:
- lib/modules/gift/l10n/gift_strings.yaml
关键解释(记住这 3 点)¶
flutter_01=pubspec.yaml的namegift_strings= builders 里定义的 keygenerate_for必须从lib/开始写
3、builder.dart(最终版)¶
lib/builder.dart¶
library gift_strings_builder;
import 'package:build/build.dart';
import 'src/l10n/gift_strings_generator.dart';
Builder generator(BuilderOptions options) =>
giftStringsBuilder(options);
📌 规则总结:
- 必须在
lib/ - 顶级函数
- 返回
Builder
4、generator 实现文件位置¶
lib/src/l10n/gift_strings_generator.dart¶
import 'package:build/build.dart';
import 'package:yaml/yaml.dart';
// 你的 _GiftStringsBuilder 实现
📌 src/ 目录含义:
内部实现,不给业务层 import
5、业务模块里怎么用¶
lib/modules/gift/l10n/gift_strings.dart¶
export 'gift_strings.g.dart';
业务代码里:
import 'package:flutter_01/modules/gift/l10n/gift_strings.dart';
GiftStrings.use(
locale: GiftLocale.zh,
mode: GiftModuleMode.loan,
);
final s = GiftStrings.current;
6、运行¶
dart run build_runner build --delete-conflicting-outputs
7、最终总结¶
一句话版本¶
builder 是工具,不是业务; YAML 是唯一真源; 业务只 import
.dart,永远不碰.g.dart
🧠 记忆口诀(非常好用)¶
builder 在 lib/
实现进 src/
yaml 在模块
g.dart 不要动
如果你愿意,下一步我可以继续帮你:
- 🔍 逐行 review 你现在的 generator 代码
- 🧪 加一个 YAML 校验(缺字段直接 fail)
- 🔁 扩展到多个模块自动扫描
- 📦 抽成一个私有 package(公司级复用)
你只要说一句: 👉 “下一步我想把它做成 XX”