createProject function

Future<void> createProject({
  1. bool force = false,
})

Entry point untuk perintah flast create

Implementation

Future<void> createProject({bool force = false}) async {
  _checkWindowsShell();

  // === Step 1: Tanya informasi project ===
  final projectName = _askProjectName();
  final allowOverwrite = await confirmOverwrite(projectName, force: force);
  if (!allowOverwrite) {
    print('❌ Project creation cancelled.');
    exit(0);
  }

  final org = _askOrg();
  final platforms = _askPlatforms();
  final androidLang = _askAndroidLang();
  final iosLang = _askIosLang();
  final useFvm = _askUseFvm();

  // === Step 2: Setup project ===
  final shell = Shell();
  final flutterCmd = useFvm ? 'fvm flutter' : 'flutter';

  await _cloneStarterKit(shell, projectName);
  await _updatePubspecName(projectName);

  await safeDelete('.git');
  await shell.run('git init');

  if (File('.env.example').existsSync()) {
    await runCopy('.env.example', '.env');
  }

  // Bersihkan platform lama dari starter kit
  for (var platform in ['android', 'ios', 'web', 'windows', 'linux', 'macos']) {
    await safeDelete(platform);
  }

  if (useFvm) {
    await installFlutterFromFvmrc(shell);
  }

  // Buat ulang project dengan konfigurasi user
  await shell.run(
    '$flutterCmd create --org $org --platforms ${platforms.join(",")} '
    '--android-language $androidLang --ios-language $iosLang .',
  );

  // === Step 3: Post setup ===
  await runPostSetup(shell: shell, useFvm: useFvm);

  // === Step 4: Print next steps ===
  _printNextSteps(projectName, useFvm);
}