promptForModules static method

Future<List<String>> promptForModules(
  1. Logger logger
)

Prompts the user to select utility modules to include in the project.

Available modules include:

  • Camera: Photo/video capture service
  • Speech: Speech-to-text and text-to-speech
  • Recorder: Audio recording and playback
  • Call: Phone call and VoIP service
  • Contacts: Access to device contacts

Returns a list of selected module identifiers.

Implementation

static Future<List<String>> promptForModules(Logger logger) async {
  final modules = <String>[];
  logger.info('πŸ“± Utility Module Selection');
  logger.info('Select which utility modules to include:');

  final availableModules = {
    'camera': {
      'name': 'πŸ“Έ Camera Module',
      'description': 'Camera service for capturing photos/videos',
      'dependencies': ['camera', 'image_picker'],
    },
    'speech': {
      'name': '🎀 Speech Module',
      'description': 'Speech-to-text and Text-to-speech services',
      'dependencies': ['speech_to_text', 'flutter_tts'],
    },
    'recorder': {
      'name': 'πŸŽ™οΈ Audio Recorder Module',
      'description': 'Audio recording and playback service',
      'dependencies': ['record', 'path_provider'],
    },
    'call': {
      'name': 'πŸ“ž Call Module',
      'description': 'Phone call and VoIP service',
      'dependencies': ['url_launcher', 'permission_handler'],
    },
    'location': {
      'name': 'πŸ“ Location Module',
      'description': 'GPS location tracking and geolocation services',
      'dependencies': ['geolocator', 'permission_handler'],
    },
  };

  for (final entry in availableModules.entries) {
    final moduleKey = entry.key;
    final moduleInfo = entry.value;

    logger.info('');
    logger.info('${moduleInfo['name']}');
    logger.info('  ${moduleInfo['description']}');
    logger.info(
        '  Dependencies: ${(moduleInfo['dependencies'] as List<String>).join(', ')}');

    final include = logger.confirm(
      'Include ${moduleInfo['name']}?',
      defaultValue: false,
    );

    if (include) {
      modules.add(moduleKey);
      logger.success('βœ“ Added ${moduleInfo['name']}');
    } else {
      logger.detail('βœ— Skipped ${moduleInfo['name']}');
    }
  }

  logger.info('');
  if (modules.isEmpty) {
    logger.info('⚠️  No utility modules selected');
  } else {
    logger.success('Selected modules: ${modules.join(', ')}');
  }

  return modules;
}