initializeFeatureWidget function
Future<void>
initializeFeatureWidget(
{ - required String featureName,
- 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");
}
}