run method
The execution body of the command.
Implementation
@override
Future<void> run(List<String> args, {required Logger logger}) async {
if (args.isEmpty) {
logger.error('Usage: deeplink add-scheme <scheme-name>');
return;
}
final newScheme = args.first.trim().toLowerCase();
if (newScheme.isEmpty) {
logger.error('Scheme name cannot be empty.');
return;
}
final finder = ProjectFinder();
final projectRoot = finder.findProjectRoot();
final project = FlutterProject(projectRoot);
final configManager = ConfigManager(projectRoot);
if (!configManager.configExists()) {
logger.error('No configuration found. Please run "deeplink init" first.');
return;
}
final config = configManager.load();
if (config.schemes.contains(newScheme)) {
logger.warning('Scheme "$newScheme" is already configured.');
return;
}
final spinner = Spinner('Adding scheme "$newScheme"...');
spinner.start();
try {
// 1. Update AndroidManifest.xml
if (FileUtils.exists(project.androidManifestPath)) {
var manifestContent = FileUtils.readAsString(project.androidManifestPath);
manifestContent = AndroidManifestEditor().addScheme(manifestContent, newScheme);
FileUtils.writeString(project.androidManifestPath, manifestContent);
}
// 2. Update Info.plist
if (FileUtils.exists(project.iosPlistPath)) {
var plistContent = FileUtils.readAsString(project.iosPlistPath);
plistContent = PlistEditor().addScheme(plistContent, newScheme);
FileUtils.writeString(project.iosPlistPath, plistContent);
}
// 3. Update Configuration and regenerate Flutter constants
final updatedSchemes = List<String>.from(config.schemes)..add(newScheme);
final updatedConfig = DeepLinkConfig(
schemes: updatedSchemes,
generateSampleRoutes: config.generateSampleRoutes,
generateDeepLinkManager: config.generateDeepLinkManager,
androidAppLinks: config.androidAppLinks,
iosUniversalLinks: config.iosUniversalLinks,
domains: config.domains,
);
configManager.save(updatedConfig);
final generator = FlutterGenerator(projectRoot, logger);
generator.generate(updatedConfig);
spinner.stop(success: true, finalMessage: 'Scheme "$newScheme" added and configured successfully.');
} catch (e) {
spinner.stop(success: false, finalMessage: 'Failed to add scheme.');
logger.error('Failed to add scheme: ${e.toString()}');
}
}