run method
The execution body of the command.
Implementation
@override
Future<void> run(List<String> args, {required Logger logger}) async {
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 spinner = Spinner('Regenerating deep link files...');
spinner.start();
try {
final config = configManager.load();
// 1. Regenerate Flutter files
final generator = FlutterGenerator(projectRoot, logger);
generator.generate(config);
// 2. Regenerate Setup Documentation if relevant
if (config.androidAppLinks || config.iosUniversalLinks) {
final setupDir = PathUtils.join(projectRoot, 'deeplink_setup');
FileUtils.createDirectory(setupDir);
final templateEngine = TemplateEngine();
final packageName = project.getAndroidPackageName();
if (config.androidAppLinks) {
final renderedAssetLinks = templateEngine.render(
TemplatesBundle.assetLinksJson,
{
'PACKAGE_NAME': packageName,
'SHA256_FINGERPRINT': 'YOUR_SHA256_FINGERPRINT_HERE',
},
);
FileUtils.writeString(PathUtils.join(setupDir, 'assetlinks.json'), renderedAssetLinks);
}
if (config.iosUniversalLinks) {
final renderedAasa = templateEngine.render(
TemplatesBundle.appleAppSiteAssociation,
{
'TEAM_ID': 'YOUR_APPLE_TEAM_ID',
'BUNDLE_ID': 'YOUR_APPLE_BUNDLE_ID',
},
);
FileUtils.writeString(PathUtils.join(setupDir, 'apple-app-site-association'), renderedAasa);
}
final renderedInstructions = templateEngine.render(
TemplatesBundle.setupInstructions,
{
'SCHEME': config.schemes.isNotEmpty ? config.schemes.first : 'myapp',
'DOMAINS': config.domains.join(', '),
'PACKAGE_NAME': packageName,
'DOMAIN_1': config.domains.isNotEmpty ? config.domains[0] : 'your-domain.com',
'DOMAIN_2': config.domains.length > 1 ? config.domains[1] : 'your-second-domain.com',
},
);
FileUtils.writeString(PathUtils.join(setupDir, 'README.md'), renderedInstructions);
}
spinner.stop(success: true, finalMessage: 'Deep link files regenerated successfully, custom code preserved.');
} catch (e) {
spinner.stop(success: false, finalMessage: 'Regeneration failed.');
logger.error('Failed to regenerate files: ${e.toString()}');
}
}