run method

  1. @override
Future<void> run(
  1. List<String> args, {
  2. required Logger logger,
})
override

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()}');
  }
}