addFlavor static method

bool addFlavor(
  1. String flavor
)

Implementation

static bool addFlavor(String flavor) {
  final config = load();
  final normalized = _normalize(flavor);

  if (!_isValidFlavor(normalized)) {
    throw Exception('❌ Invalid flavor name: "$flavor"');
  }
  if (config.flavors.contains(normalized)) {
    return false; // already exists
  }

  final updatedFlavors = List<String>.from(config.flavors)..add(normalized);

  // Initialize empty values for new flavor to satisfy validator
  final updatedValues = Map<String, Map<String, dynamic>>.from(
    config.flavorValues,
  );
  updatedValues[normalized] = {
    for (final field in config.fields.keys)
      field: TypeUtils.getDefaultTypedValueForType(
        config.fields[field] ?? "String",
      ),
  };

  FlavorConfig updatedConfig = config.copyWith(
    flavors: updatedFlavors,
    flavorValues: updatedValues,
  );

  // Also add to flavorAppNames if defined
  if (updatedConfig.flavorAppNames != null) {
    final newAppNames = Map<String, String>.from(
      updatedConfig.flavorAppNames!,
    );
    // Generate app name: production flavor gets base name, others get "appName-flavor"
    newAppNames[normalized] = normalized == updatedConfig.productionFlavor
        ? updatedConfig.appName
        : '${updatedConfig.appName}-$normalized';
    updatedConfig = updatedConfig.copyWith(flavorAppNames: newAppNames);
  }

  save(updatedConfig);
  return true;
}