generate static method

String generate({
  1. required String projectName,
  2. required String stateManagement,
  3. required bool includeFirebase,
  4. List<String> firebaseModules = const [],
  5. bool includeChatbot = false,
  6. List<String> selectedLanguages = const ['en'],
})

Implementation

static String generate({
  required String projectName,
  required String stateManagement,
  required bool includeFirebase,
  List<String> firebaseModules = const [],
  bool includeChatbot = false,
  List<String> selectedLanguages = const ['en'],
}) {
  // Build dependencies list
  final stateManagementDeps = <String>[];
  switch (stateManagement) {
    case 'riverpod':
      stateManagementDeps.add('  flutter_riverpod: ^2.6.1');
      // Add provider if localization is enabled (for LocaleProvider)
      if (selectedLanguages.length > 1) {
        stateManagementDeps.add('  provider: ^6.1.2');
      }
      break;
    case 'provider':
      stateManagementDeps.add('  provider: ^6.1.2');
      break;
    case 'bloc':
      stateManagementDeps.add('  flutter_bloc: ^8.1.6');
      stateManagementDeps.add('  equatable: ^2.0.7');
      // Add provider if localization is enabled (for LocaleProvider)
      if (selectedLanguages.length > 1) {
        stateManagementDeps.add('  provider: ^6.1.2');
      }
      break;
  }

  // Firebase dependencies based on selected modules
  final firebaseDeps = <String>[];
  if (includeFirebase) {
    if (firebaseModules.isEmpty) {
      // Backward compatibility - include all if no modules specified
      firebaseDeps.addAll([
        '  firebase_core: ^3.8.1',
        '  firebase_auth: ^5.3.4',
        '  cloud_firestore: ^5.5.2',
        '  firebase_storage: ^12.3.8',
        '  firebase_analytics: ^11.3.8',
      ]);
    } else {
      // Add only selected modules
      if (firebaseModules.contains('core') || firebaseModules.length > 1) {
        firebaseDeps.add('  firebase_core: ^3.8.1');
      }
      if (firebaseModules.contains('auth')) {
        firebaseDeps.add('  firebase_auth: ^5.3.4');
      }
      if (firebaseModules.contains('firestore')) {
        firebaseDeps.add('  cloud_firestore: ^5.5.2');
      }
      if (firebaseModules.contains('storage')) {
        firebaseDeps.add('  firebase_storage: ^12.3.8');
      }
      if (firebaseModules.contains('fcm')) {
        firebaseDeps.add('  firebase_messaging: ^15.1.5');
        firebaseDeps.add('  flutter_local_notifications: ^18.0.1');
      }
      firebaseDeps.add('  firebase_analytics: ^11.3.8');
    }
  }

  // Chatbot dependencies
  final chatbotDeps = <String>[];
  if (includeChatbot) {
    chatbotDeps.addAll([
      '  # AI Chatbot',
      '  dio: ^5.7.0',
      '  flutter_bloc: ^8.1.6',
      '  equatable: ^2.0.7',
    ]);

    // Remove duplicates if bloc is already added for state management
    if (stateManagement == 'bloc') {
      chatbotDeps.removeWhere(
          (dep) => dep.contains('flutter_bloc') || dep.contains('equatable'));
    }
  }

  return '''
name: $projectName
description: A production-ready Flutter application
publish_to: 'none'
version: 1.0.0+1

environment:
sdk: ^3.5.0

dependencies:
flutter:
  sdk: flutter
flutter_localizations:
  sdk: flutter
intl: any

# Routing
go_router: ^14.6.2

# State Management
${stateManagementDeps.isEmpty ? '  # No state management selected' : stateManagementDeps.join('\n')}

${firebaseDeps.isEmpty ? '' : '  # Firebase\n${firebaseDeps.join('\n')}\n  '}
${chatbotDeps.isEmpty ? '' : '${chatbotDeps.join('\n')}\n  '}
# Utilities
http: ^1.2.2
shared_preferences: ^2.3.3
image_picker: ^1.0.7
permission_handler: ^11.3.1
speech_to_text: ^7.3.0
flutter_tts: ^4.0.2
record: ^6.1.2
path_provider: ^2.1.4
url_launcher: ^6.3.0
flutter_contacts: ^1.1.7
provider: ^6.1.5+1

${includeChatbot ? '# dio already included for chatbot' : 'dio: ^5.7.0'}

dev_dependencies:
flutter_test:
  sdk: flutter
flutter_lints: ^5.0.0
build_runner: ^2.4.13

flutter:
uses-material-design: true
generate: true

# assets:
#   - images/
#   - assets/

# fonts:
#   - family: CustomFont
#     fonts:
#       - asset: fonts/CustomFont-Regular.ttf
#       - asset: fonts/CustomFont-Bold.ttf
#         weight: 700
''';
}