build method
Generates the outputs for a given BuildStep.
Implementation
@override
Future<void> build(BuildStep buildStep) async {
// Debug: print input
print('ExcelTranslatorBuilder running on: ${buildStep.inputId}');
// Only run on pubspec.yaml
if (!buildStep.inputId.path.endsWith('pubspec.yaml')) {
print('Skipping because input is not pubspec.yaml');
return;
}
final config = await _loadConfig(buildStep);
if (config == null) {
print('No excel_translator configuration found in pubspec.yaml');
return;
}
final excelFile = config['excel_file'] as String?;
if (excelFile == null) {
log.warning('No excel_file specified in excel_translator configuration');
return;
}
final outputDir = config['output_dir'] as String? ?? 'lib';
final className = config['class_name'] as String? ?? 'AppLocalizations';
final includeFlutterDelegates = config['include_flutter_delegates'] as bool? ?? true;
// Find the Excel file
final excelFileAsset = AssetId(buildStep.inputId.package, excelFile);
if (!await buildStep.canRead(excelFileAsset)) {
log.warning('Excel file not found: $excelFile');
return;
}
try {
// Read the Excel file
final bytes = await buildStep.readAsBytes(excelFileAsset);
// Parse the file
final parser = FileParserFactory.createParser(excelFile);
final sheets = await parser.parseFileFromBytes(bytes, languageService: LanguageService());
if (sheets.isEmpty) {
log.warning('No sheets found in $excelFile');
return;
}
// Sort sheets for consistent ordering
sheets.sort((a, b) => a.name.compareTo(b.name));
// Generate code
await _generateLocalizations(buildStep, sheets, outputDir, className, includeFlutterDelegates);
log.info('Generated localizations from $excelFile');
} catch (e, stackTrace) {
log.severe('Failed to generate localizations: $e\n$stackTrace');
}
}