writeArbFile static method

Future<void> writeArbFile(
  1. String filePath,
  2. Map<String, dynamic> content, {
  3. bool prettyPrint = true,
  4. bool createBackup = false,
})

Writes the given content Map to an ARB file at the specified filePath.

Creates parent directories if they don't exist and optionally creates backup files before overwriting existing files.

Example:

await ArbHelper.writeArbFile(
  'lib/l10n/app_fr.arb',
  {'appTitle': 'Mon App'},
  prettyPrint: true,
  createBackup: true,
);

filePath: The file path where the ARB file will be written. content: A Map containing the key-value pairs to write. prettyPrint: Whether to format JSON with indentation (default: true). createBackup: Whether to create a backup before overwriting (default: false).

Returns a Future<void> that completes when the file has been written.

Throws ArbFileWriteException if writing fails. Throws ArbValidationException if content validation fails.

Implementation

static Future<void> writeArbFile(
  String filePath,
  Map<String, dynamic> content, {
  bool prettyPrint = true,
  bool createBackup = false,
}) async {
  // Validate content before writing
  final validationIssues = _validateArbStructure(content);
  if (validationIssues.isNotEmpty) {
    throw ArbValidationException(filePath, validationIssues);
  }

  try {
    final file = File(filePath);

    // Create parent directories if they don't exist
    await file.parent.create(recursive: true);

    // Create backup if requested and file exists
    if (createBackup && await file.exists()) {
      await _createBackup(filePath);
    }

    // Encode JSON
    final encoder = prettyPrint
        ? const JsonEncoder.withIndent('  ')
        : const JsonEncoder();
    final jsonContent = encoder.convert(content);

    // Write file
    await file.writeAsString(jsonContent);
  } catch (e) {
    throw ArbFileWriteException(filePath, e.toString());
  }
}