execute method

  1. @override
Future<void> execute()
override

execute command

Implementation

@override
Future<void> execute() async {
  var isProject = false;
  if (VortexCli.arguments[0] == 'create' || VortexCli.arguments[0] == '-c') {
    isProject = VortexCli.arguments[1].split(':').first == 'project';
  }
  var pageName = this.name;
  if (pageName.isEmpty || isProject) {
    pageName = 'index';
  }

  final pageType = flags.contains('--stateful') ? 'stateful' : 'stateless';
  final pageDir =
      flags.contains('--dir') ? _getArgValue('--dir') : 'lib/pages';
  final routePath =
      flags.contains('--route')
          ? _getArgValue('--route')
          : '/${pageName.toLowerCase()}';
  final customFileName =
      flags.contains('--file') ? _getArgValue('--file') : null;

  LogService.info("Generating $pageType page: $pageName");
  LogService.info("Route path: $routePath");

  try {
    // Create the directory if it doesn't exist
    final projectDir = Directory.current.path;
    final fullPageDir = path.join(projectDir, pageDir);

    if (!Directory(fullPageDir).existsSync()) {
      Directory(fullPageDir).createSync(recursive: true);
      LogService.info("Created directory: $pageDir");
    }

    // Determine the file path
    final fileName =
        customFileName != null
            ? customFileName.endsWith('.dart')
                ? customFileName
                : '$customFileName.dart'
            : '${_getFileNameFromPageName(pageName)}.dart';
    final filePath = path.join(fullPageDir, fileName);

    // Check if the file already exists
    if (File(filePath).existsSync()) {
      throw CliException("File already exists: $filePath");
    }

    // Generate the page content
    final pageContent = _generatePageContent(pageName, pageType, routePath);

    // Write the file
    File(filePath).writeAsStringSync(pageContent);

    LogService.success("Generated page at: $filePath");
    LogService.info("Running router scanner to update routes...");
  } catch (e) {
    LogService.error("Error generating page: $e");
  }
}