run method

  1. @override
Future<void> run()
override

Runs this command.

The return value is wrapped in a Future if necessary and returned by CommandRunner.runCommand.

Implementation

@override
Future<void> run() async {
  logger.info(lightCyan.wrap('''
███████╗██████╗ ███████╗ ██████╗████████╗██████╗  █████╗
██╔════╝██╔══██╗██╔════╝██╔════╝╚══██╔══╝██╔══██╗██╔══██╗
███████╗██████╔╝█████╗  ██║        ██║   ██████╔╝███████║
╚════██║██╔═══╝ ██╔══╝  ██║        ██║   ██╔══██╗██╔══██║
███████║██║     ███████╗╚██████╗   ██║   ██║  ██║██║  ██║
╚══════╝╚═╝     ╚══════╝ ╚═════╝   ╚═╝   ╚═╝  ╚═╝╚═╝  ╚═╝
''')!);

  logger.info('Welcome to Spectra! Let\'s set up your project.');

  final projectName = Select(
    prompt: 'What is your project name?',
    options: ['Spectra App', 'My Awesome CLI', 'Custom'],
  ).interact();

  final actualName = projectName == 2
      ? Input(prompt: 'Enter custom project name:').interact()
      : ['Spectra App', 'My Awesome CLI'][projectName];

  final description =
      Input(prompt: 'Briefly describe your project:').interact();

  final stack = Select(
    prompt: 'What is your tech stack?',
    options: ['Dart/CLI', 'Flutter/Mobile', 'React/Web', 'Other'],
  ).interact();

  final actualStack =
      ['Dart/CLI', 'Flutter/Mobile', 'React/Web', 'Other'][stack];

  logger.info('\nSummary:');
  logger.info('Project: $actualName');
  logger.info('Description: $description');
  logger.info('Stack: $actualStack');

  final confirm =
      Confirm(prompt: 'Initialize .spectra directory?').interact();

  if (confirm) {
    _initializeSpectra(actualName, description, actualStack);
    logger.success('Spectra initialized successfully!');
  } else {
    logger.info('Initialization cancelled.');
  }
}