execute method
Implementation
Future<void> execute(List<String> args) async {
if (!ConfigService.isValidProject(_log)) return;
if (!ConfigService.requiresInitialized(_log)) return;
final config = ConfigService.load();
final flavors = config.flavors;
if (flavors.isEmpty) {
_log.error('❌ Error: No flavors found in configuration to delete.');
return;
}
String flavorToDelete;
if (args.isEmpty) {
flavorToDelete = _log.chooseOne(
'👉 Select a flavor to delete:',
choices: flavors,
);
} else {
flavorToDelete = args[0].toLowerCase().trim();
if (!ValidationUtils.isValidIdentifier(flavorToDelete)) {
_log.error(
'❌ Error: "$flavorToDelete" is not a valid Dart identifier.',
);
return;
}
if (!flavors.contains(flavorToDelete)) {
_log.error('❌ Error: Flavor "$flavorToDelete" does not exist.');
return;
}
}
if (flavors.length == 2) {
_log.warn('⚠️ Warning: Deleting this flavor will leave only one flavor.');
_log.warn(
'This is not recommended. You should perform a full reset instead.',
);
final confirmed = _log.confirm(
'Would you like to completely reset the project instead?',
);
if (confirmed) {
SetupRunner(logger: _log).reset();
return;
} else {
_log.info('Operation cancelled.');
return;
}
}
_log.info('🗑️ Deleting flavor: $flavorToDelete...');
try {
final isProduction = flavorToDelete == config.productionFlavor;
ConfigService.removeFlavor(flavorToDelete);
final updatedConfig = ConfigService.load();
if (isProduction && updatedConfig.flavors.isNotEmpty) {
_log.warn('⚠️ You deleted the production flavor.');
final newProd = _log.chooseOne(
'👉 Please select a new production flavor:',
choices: updatedConfig.flavors,
);
ConfigService.save(updatedConfig.copyWith(productionFlavor: newProd));
_log.info('✔ Production flavor updated to: $newProd');
}
// Delegate completely to SetupRunner. It handles deleting orphaned files.
await SetupRunner(
logger: _log,
).run(ConfigService.load(), skipFirebase: true);
_log.success('✅ Flavor "$flavorToDelete" removed successfully!');
} catch (e) {
if (e is CliException && e.isLogged) return;
_log.error('❌ Failed to delete flavor: $e');
}
}