initializeFeatureWidget function

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

Implementation

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

  // 1. Define variables and paths
  final bool hasParent = ownFeaturesName != null && ownFeaturesName.isNotEmpty;
  final String parentPath = 'lib/features/$ownFeaturesName';
  final String targetRelativePath = hasParent
      ? '$parentPath/sub/$featureName'
      : 'lib/features/sub/$featureName';

  // 2. Check parent feature existence (if -f flag is used)
  if (hasParent) {
    if (!Directory(parentPath).existsSync()) {
      Logger.error(
        "❌ The parent feature '$ownFeaturesName' does not exist.\n"
        "When using '-f' for a custom parent feature, please ensure it exists in 'lib/features/' before adding a sub-feature.",
      );
      return;
    }
  }

  // 3. Comprehensive check: Search for the feature name in all potential locations to prevent 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;
  }

  try {
    // 4. Call the generation function and pass the correct path
    await generateFeatureWidgetStructure(
      featureName: featureName,
      targetRelativePath: targetRelativePath,
      ownFeaturesName: ownFeaturesName,
    );

    // 5. Run build_runner
    Logger.info("⏳ Running build_runner...");
    await FileModifier.runBuildRunner(showResult: false);
    Logger.success("✅ build_runner completed successfully.\n");

    // 6. Print detailed success message
    Logger.warning(
      "--------------------------------------------------------------",
    );
    Logger.success("✨ Widget Feature '$featureName' created successfully");
    Logger.success("📁 Location: $targetRelativePath");
    Logger.warning(
      "--------------------------------------------------------------",
    );
  } catch (e) {
    Logger.error("❌ Failed to create widget feature '$featureName': $e");
  }
}