build method

  1. @override
Future<void> build(
  1. BuildStep buildStep
)

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');
  }
}