generateGetxFolderStructure function
Future<void>
generateGetxFolderStructure(
)
Implementation
Future<void> generateGetxFolderStructure() async {
final name = Input(
prompt: 'Please enter the name of the class in snake_case format (eg. example_getx)',
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_getx)');
}
return true;
},
).interact().toLowerCase();
final customPath = Input(
prompt: 'Enter the full path where you want to create the getx 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;
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 bindingsDir = Directory(path.join(directory.path, "bindings"));
bindingsDir.createSync(recursive: true);
final controllerDir = Directory(path.join(directory.path, "controllers"));
controllerDir.createSync(recursive: true);
final viewDir = Directory(path.join(directory.path, "views"));
viewDir.createSync(recursive: true);
final String bindingsName = "${name}_bindings.dart";
final String controllerName = "${name}_controller.dart";
final String viewName = "${name}_screen.dart";
final String className = ProjectUtils.toPascalCase(name);
final bindingFile = File(path.join(bindingsDir.path, bindingsName));
final controllerFile = File(path.join(controllerDir.path, controllerName));
final viewFile = File(path.join(viewDir.path, viewName));
bindingFile.writeAsStringSync(bindingTemplate(className: className, fileName: name));
controllerFile.writeAsStringSync(controllerTemplate(className: className));
viewFile.writeAsStringSync(viewTemplate(className: className, fileName: name));
ConsoleLog.success("Getx structure created successfully in \"$folderName\"!");
}