cloneProject static method

Future<void> cloneProject()

Implementation

static Future<void> cloneProject() async {
  final projectName = await AppUtils.readLine(
    "project name (snake_case e.g. my_app)",
  );
  if (projectName.trim().isEmpty) {
    stdout.writeln("Project name is required");
    return;
  }

  stdout.write("Enter package name (e.g. com.company.myapp): ");
  final packageName = stdin.readLineSync()?.trim() ?? '';
  if (packageName.trim().isEmpty) {
    stdout.writeln("Package name is required");
    return;
  }

  stdout.writeln("Choose template branch:");
  stdout.writeln("  1) $_branchMain (default)");
  stdout.writeln("  2) $_branchMvvm");
  stdout.write("Enter choice (1 or 2) [1]: ");
  final branchChoice = stdin.readLineSync()?.trim() ?? '';
  final String branch;
  if (branchChoice == '2') {
    branch = _branchMvvm;
  } else {
    if (branchChoice.isNotEmpty && branchChoice != '1') {
      stdout.writeln("Invalid choice; using $_branchMain.");
    }
    branch = _branchMain;
  }

  stdout.writeln(" ====== Cloning project (branch: $branch) ====== ");
  final command = await Process.run("git", [
    "clone",
    "--branch",
    branch,
    _repoUrl,
    projectName,
  ]);

  if (command.exitCode != 0) {
    stdout.writeln(command.stderr);
    return;
  }

  _removeGitFolder(projectName);

  stdout.writeln(" ====== Configuring project ====== ");
  await _replaceInAllFiles(projectName, projectName, packageName);

  stdout.writeln(
    " ====== Project '$projectName' created successfully! ====== ",
  );
  stdout.writeln(" ====== Run: cd $projectName && flutter pub get ====== ");
}