run method

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

Runs this command.

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

Implementation

@override
Future<int> run() async {
  try {
    logger.info('Creating a new Flutter MVVM project...');
    logger.space(1);

    final args = argResults?.rest ?? [];

    String projectName = args.isNotEmpty ? args[0] : _promptForProjectName();

    final projectDir = Directory(projectName);
    if (projectDir.existsSync()) {
      logger.err('Error: Directory "$projectName" already exists.');
      return ExitCode.ioError.code;
    }
    // Step 1: Run `flutter create projectName`
    if (!_createFlutterProject(projectName)) {
      return ExitCode.software.code;
    }

    // Step 2: Ask user for networking library
    final networkingLib = _promptForNetworkingLibrary();

    // Step 3: Add basic directories
    _addBasicDirectories(projectName);

    // Step 4: Modify necessary files using templates
    _generateBasicFiles(projectName, networkingLib);


    logger.info('Project created successfully!');
    return ExitCode.success.code;
  } catch (e) {
    logger.err('Error creating project: $e');
    return ExitCode.software.code;
  }
}