generateBlocFolderStructure function

Future<void> generateBlocFolderStructure()

Implementation

Future<void> generateBlocFolderStructure() async {
  final name = Input(
    prompt: 'Please enter the name of the class in snake_case format (eg. example_bloc)',
    validator: (v) {
      final value = v.trim().toLowerCase();

      if (value.isEmpty || RegExp(r'^[0-9]').hasMatch(value) || value.contains(' ') || !RegExp(r'^[a-z0-9_]+$').hasMatch(value)) {
        throw ValidationError('Please enter a valid name in snake_case format (eg. example_bloc)');
      }

      return true;
    },
  ).interact().toLowerCase();

  final customPath = Input(
    prompt: 'Enter the full path where you want to create the bloc folder:',
    defaultValue: Directory.current.path,
    validator: (v) {
      final trimmed = v.trim();

      final dir = Directory(trimmed);
      if (trimmed.isNotEmpty && !dir.existsSync()) {
        throw ValidationError('Directory does not exist. Please enter a valid path.');
      }

      return true;
    },
  ).interact();

  final basePath = customPath.trim().isEmpty ? Directory.current.path : customPath.trim();

  final String folderName = "${name}_bloc";
  final fullPath = path.join(basePath, folderName);
  final directory = Directory(fullPath);

  if (directory.existsSync()) {
    ConsoleLog.error("Folder $folderName already exists! Try some different name");
    exit(1);
  }

  directory.createSync(recursive: true);

  final String stateName = "${name}_state.dart";
  final String eventName = "${name}_event.dart";
  final String blocName = "${name}_bloc.dart";

  final String className = ProjectUtils.toPascalCase(name);

  final stateFile = File(path.join(directory.path, stateName));
  final eventFile = File(path.join(directory.path, eventName));
  final blocFile = File(path.join(directory.path, blocName));

  stateFile.writeAsStringSync(stateTemplate(className));
  eventFile.writeAsStringSync(eventTemplate(className));
  blocFile.writeAsStringSync(blocTemplate(className, name));

  ConsoleLog.success("BLoC structure created successfully in \"$folderName\"!");
}