generate method
Generates the complete Flutter project with all configured features.
This method orchestrates the entire project generation process including:
- Creating the Flutter project structure
- Generating screens and routing
- Configuring Firebase (if enabled)
- Setting up Docker (if web + docker enabled)
- Generating localization files (if multiple languages selected)
onBeforeFirebase - Optional callback executed before Firebase configuration
Throws Exception if project creation fails.
Implementation
Future<void> generate({VoidCallBack? onBeforeFirebase}) async {
final progress = logger.progress('Creating Flutter app: $projectName');
try {
// Step 1: Create Flutter project
await _createFlutterProject();
progress.update('Creating Flutter app: $projectName');
// Step 2: Generate folder structure
await _generateFolderStructure();
progress.update('Setting up project structure');
// Step 3: Generate pubspec.yaml with all dependencies
await _generatePubspec();
progress.update('Configuring dependencies');
// Step 4: Generate theme
await _generateTheme();
progress.update('Generating theme');
// Step 5: Generate reusable widgets
await _generateEnhancedReusableWidgets();
// Step 6: Generate chatbot if enabled
if (includeChatbot) {
await _generateChatbot();
}
// Step 7: Generate Firebase operations if enabled
if (includeFirebase && firebaseModules.isNotEmpty) {
await _generateFirebaseOperations();
}
await _generateUtilityModules();
await _configureNative();
// Step 8: Generate screens
await _generateScreens();
// Step 9: Generate router
await _generateRouter();
// Step 10: Generate main.dart
await _generateMainFile();
// Step 11: Replace default test with a compatible smoke test
await _generateTestFile();
// Step 12: Run flutter pub get
await _runFlutterPubGet();
// Step 13: Enable Flutter Web if requested
if (includeWeb) {
await _enableFlutterWeb();
}
// Step 14: Generate Docker setup if Web + Docker enabled
if (includeWeb && includeDocker) {
await _generateDockerSetup();
}
// Step 15: Generate localization files
if (selectedLanguages.isNotEmpty && selectedLanguages.length > 1) {
await _generateLocalization();
}
// Step 16: Generate README.md
await _generateReadme();
// Complete the progress before Firebase config
progress.complete('Project created successfully!');
// Step 16: Configure Firebase AFTER completing progress
// This is crucial - Firebase config needs interactive input
if (includeFirebase) {
onBeforeFirebase?.call();
await _configureFirebase();
}
logger
.success('✨ Project generated successfully with $themeColor theme!');
} catch (e, st) {
progress.fail('Failed to create project');
logger.err('Error: $e');
logger.detail(st.toString());
rethrow;
}
}