initProject function

Future<void> initProject({
  1. required String projectName,
  2. required bool riverpod,
  3. required bool bloc,
  4. required bool getx,
  5. bool useGoRouter = true,
  6. bool useTheme = true,
})

Implementation

Future<void> initProject({
  required String projectName,
  required bool riverpod,
  required bool bloc,
  required bool getx,
  bool useGoRouter = true,
  bool useTheme = true,
}) async {
  await createFlutterProject(projectName);

  createFolders(projectName);

  createMainFile(
    projectName: projectName,
    riverpod: riverpod,
    bloc: bloc,
    getx: getx,
  );

  if (useGoRouter) {
    createRouterFile(projectName);
    createRoutesFile(projectName);
  }

  if (useTheme) {
    createThemeFile(projectName);
  }

  // Config save karo
  final stateManagement = riverpod
      ? 'Riverpod'
      : bloc
      ? 'Bloc'
      : getx
      ? 'GetX'
      : 'Provider';

  ConfigService.saveConfig(
    projectName: projectName,
    stateManagement: stateManagement,
  );

  // Dependencies
  final packages = <String>[];
  if (useGoRouter) packages.add('go_router');

  if (riverpod) {
    print('šŸ“¦ Adding Riverpod + Dio...');
    packages.addAll(['flutter_riverpod', 'dio']);
    await _addPackages(projectName, packages);
    print('šŸ”„ Riverpod architecture ready');
  } else if (bloc) {
    print('šŸ“¦ Adding Bloc + Dio...');
    packages.addAll(['flutter_bloc', 'equatable', 'dio']);
    await _addPackages(projectName, packages);
    print('šŸ”„ Bloc architecture ready');
  } else if (getx) {
    print('šŸ“¦ Adding GetX + Dio...');
    packages.addAll(['get', 'dio']);
    await _addPackages(projectName, packages);
    print('šŸ”„ GetX architecture ready');
  } else {
    print('šŸ“¦ Adding Provider + Dio...');
    packages.addAll(['provider', 'dio']);
    await _addPackages(projectName, packages);
    print('šŸ”„ Provider architecture ready');
  }

  print('\nāœ… Project "$projectName" created successfully!');
  print('šŸ‘‰ cd $projectName && flutter run');
}