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\"!");
}