initializeFeatureScreen function
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");
}
}