projectInfoStep function

Future<(String, String)> projectInfoStep()

Collects project name and org identifier.

Implementation

Future<(String name, String org)> projectInfoStep() async {
  print('');
  print('┌─────────────────────────────────────────┐');
  print('│       FlutterBlueprint — New App         │');
  print('└─────────────────────────────────────────┘');
  print('');

  final name = Input(
    prompt: 'App name',
    validator: (value) {
      if (value.trim().isEmpty) throw ValidationError('App name cannot be empty');
      if (!RegExp(r'^[a-zA-Z][a-zA-Z0-9_\- ]*$').hasMatch(value.trim())) {
        throw ValidationError('Name must start with a letter and contain only letters, numbers, underscores, hyphens, or spaces');
      }
      return true;
    },
  ).interact();

  final org = Input(
    prompt: 'Organization (reverse domain, e.g. com.example)',
    defaultValue: 'com.example',
    validator: (value) {
      if (!RegExp(r'^[a-z][a-z0-9]*(\.[a-z][a-z0-9]*)+$').hasMatch(value.trim())) {
        throw ValidationError('Org must be a valid reverse domain (e.g. com.example)');
      }
      return true;
    },
  ).interact();

  return (name.trim(), org.trim());
}