createScreens method
Implementation
Future<void> createScreens() async {
bool modulesDirectoryExist = await checkDirectoryExist(Constants.modulesDirectoryPath);
DirectoryStructor directoryStructor = modulesDirectoryExist ? DirectoryStructor.modular : DirectoryStructor.global;
if (directoryStructor == DirectoryStructor.global) {
await checkNonModularPatternScreenExist();
}
Logger.instance.message("""\nNote:
- Press Space to select or unselect an option.
- Use the Up (↑) and Down (↓) arrow keys to navigate.
- Press Enter to confirm your selection.\n""");
Logger.instance.message("Choose the type of screen you want to create:");
int selectedScreen = SelectMenu(options: ["Blank Screen", "Listing Screen", "Grid Screen"], console: Logger.instance).ask();
String? selectedModuleName;
bool moduleCreated = false;
if (directoryStructor == DirectoryStructor.modular) {
String moduleDirPath = [Directory.current.path, ...Constants.modulesDirectoryPath.split("/")..remove("")].join(Platform.pathSeparator);
Directory dir = Directory(moduleDirPath);
if (!await dir.exists()) {
throw CliException(message: "$moduleDirPath ${Constants.modulesDirectoryPath} Directory not found");
}
List<String> modules = dir.listSync().whereType<Directory>().map((e) => e.path.split(Platform.pathSeparator).last).toList();
modules.remove("shared");
modules.add("+ Create New Module");
Logger.instance.message("Select a Module to Create a Screen:");
int selectedModule = SelectMenu(options: modules, console: Logger.instance).ask();
if (selectedModule == modules.length - 1) {
Logger.instance.message("");
selectedModuleName = getModuleNameFromUser();
if (selectedModuleName.isNotEmpty) {
moduleCreated = true;
await createDirectory("${Constants.modulesDirectoryPath}/$selectedModuleName");
await Future.wait([
createDirectory("${Constants.modulesDirectoryPath}/$selectedModuleName/models"),
createDirectory("${Constants.modulesDirectoryPath}/$selectedModuleName/widgets"),
createDirectory("${Constants.modulesDirectoryPath}/$selectedModuleName/shared/controllers"),
createDirectory("${Constants.modulesDirectoryPath}/$selectedModuleName/shared/repositories"),
]);
}
} else {
selectedModuleName = modules[selectedModule];
}
}
if (directoryStructor == DirectoryStructor.modular && (selectedModuleName ?? "").isEmpty) {
throw CliException(message: "Something went wrong!");
}
if (directoryStructor == DirectoryStructor.modular) {
await checkModularPatternScreenExist(selectedModuleName!);
}
CreateCommand createCommand = switch (selectedScreen) {
0 => BlankScreenCreateCommand(directoryStructor, selectedModuleName, moduleCreated),
1 => ListingScreenCreateCommand(directoryStructor, selectedModuleName, moduleCreated),
2 => GridScreenCreateCommand(directoryStructor, selectedModuleName, moduleCreated),
_ => BlankScreenCreateCommand(directoryStructor, selectedModuleName, moduleCreated),
};
await createCommand.execute();
}