applyClientFonts method

Future<void> applyClientFonts(
  1. String clientAssetsPath
)

Swaps system fonts for client fonts and updates pubspec configuration.

Implementation

Future<void> applyClientFonts(String clientAssetsPath) async {
  final clientFontsDir =
      Directory(p.join(projectDir, clientAssetsPath, 'fonts'));
  final targetFontsDir = Directory(p.join(projectDir, 'assets', 'fonts'));

  if (!clientFontsDir.existsSync()) {
    print('ℹ️ No custom fonts found for this client. Skipping.');
    return;
  }

  final backupDir = Directory('${targetFontsDir.path}.bak');
  if (targetFontsDir.existsSync() && !backupDir.existsSync()) {
    await targetFontsDir.rename(backupDir.path);
  }

  await targetFontsDir.create(recursive: true);
  await _copyDirectory(clientFontsDir, targetFontsDir);

  final fontsConfigFile = File(p.join(clientFontsDir.path, 'fonts.yaml'));
  if (fontsConfigFile.existsSync()) {
    print('✏️ Overwriting pubspec fonts with client configuration...');

    final fontsContent = await fontsConfigFile.readAsString();
    final fontsList = loadYaml(fontsContent);

    if (fontsList is YamlList || fontsList is List) {
      await config.updatePubspecFonts(fontsList);
      print('✅ Client font configuration applied to pubspec.yaml');
    } else {
      print('⚠️ Error: fonts.yaml must be a list of font families.');
    }
  }
}