initializeFeatureScreen function

Future<void> initializeFeatureScreen({
  1. required String featureName,
  2. String? basePath,
})

Implementation

Future<void> initializeFeatureScreen({
  required String featureName,
  String? basePath,
}) async {
  Logger.info("🚀 Starting to create '$featureName' screen feature...");

  // 1. Verify required core structure exists
  final coreExists = await FileModifier.checkFolderExistenceAsync(
    folderPath: 'lib/core',
  );
  if (!coreExists) {
    Logger.error("❌ Cannot create feature: 'lib/core' folder is missing.");
    return; // Stop execution if core doesn't exist
  }

  final diFileExists = await FileModifier.checkFileExistenceAsync(
    filePath: 'lib/core/di/configure_dependencies.dart',
  );
  if (!diFileExists) {
    Logger.error(
      "❌ Cannot create feature: 'configure_dependencies.dart' is missing in 'lib/core/di/'.",
    );
    return; // Stop execution
  }

  final appRouterExists = await FileModifier.checkFileExistenceAsync(
    filePath: 'lib/core/navigation/app_router.dart',
  );
  if (!appRouterExists) {
    Logger.error(
      "❌ Cannot create feature: 'app_router.dart' is missing in 'lib/core/navigation/'.",
    );
    return; // Stop execution
  }

  final routersExists = await FileModifier.checkFileExistenceAsync(
    filePath: 'lib/core/navigation/routers.dart',
  );
  if (!routersExists) {
    Logger.error(
      "❌ Cannot create feature: 'routers.dart' is missing in 'lib/core/navigation/'.",
    );
    return; // Stop execution
  }

  // 2. Comprehensive check: Prevent feature name conflicts
  final existingPath = _findExistingFeaturePath(featureName);
  if (existingPath != null) {
    Logger.error(
      "❌ Conflict Detected: The feature '$featureName' already exists at:\n"
      "📁 $existingPath\n"
      "Please choose a different name to avoid import conflicts.",
    );
    return; // Stop execution to protect the project structure
  }

  try {
    // 3. Generate feature structure
    Logger.info("📂 Generating screen feature structure...");
    await generateFeatureScreenStructure(
      featureName,
      basePath ?? 'lib/features',
    );

    // 4. Run build_runner (Fixed to match the log)
    Logger.info("⏳ Running build_runner...");
    await FileModifier.runBuildRunner(showResult: false);
    Logger.success("✅ build_runner completed successfully.\n");

    // 5. Success summary
    Logger.warning(
      "--------------------------------------------------------------",
    );
    Logger.success("✨ Screen Feature '$featureName' created successfully");
    Logger.warning(
      "--------------------------------------------------------------",
    );
  } catch (e) {
    Logger.error("❌ Failed to create screen feature '$featureName': $e");
  }
}