build method
Generates the outputs for a given BuildStep.
Implementation
@override
Future<void> build(BuildStep buildStep) async {
final allConfigs = <String, bool>{};
// 查找所有的.event_config.json文件
final pattern = Glob('lib/**.tcmpp_event_config.json');
await for (final input in buildStep.findAssets(pattern)) {
try {
final content = await buildStep.readAsString(input);
final config = json.decode(content) as Map<String, dynamic>;
// 合并配置
config.forEach((key, value) {
if (value is bool) {
allConfigs[key] = value;
}
});
log.info('[EventConfigAggregator] Merged config from ${input.path}: ${config.keys.join(", ")}');
} catch (e) {
log.warning('[EventConfigAggregator] Failed to read ${input.path}: $e');
}
}
if (allConfigs.isNotEmpty) {
// 生成统一的配置文件
final outputId = AssetId(buildStep.inputId.package, 'lib/generated/tcmpp_event_config.json');
final jsonOutput = const JsonEncoder.withIndent(' ').convert(allConfigs);
await buildStep.writeAsString(outputId, jsonOutput);
log.info('[EventConfigAggregator] Generated unified config with ${allConfigs.length} entries');
} else {
log.info('[EventConfigAggregator] No event configs found');
}
}