execute method

  1. @override
Future<void> execute()
override

execute command

Implementation

@override
Future<void> execute() async {
  final wantDev = flags.contains('-d') || flags.contains('-dev') || flags.contains('-development');
  final wantStaging = flags.contains('-s') || flags.contains('-staging');
  final wantUat = flags.contains('-u') || flags.contains('-uat');
  final wantProduction = flags.contains('-p') || flags.contains('-production');

  final selectedCount = [wantDev, wantStaging, wantUat, wantProduction].where((e) => e).length;
  if (selectedCount > 1) {
    LogService.error('Choose only one environment: -d/--dev, -s/--staging, -u/--uat, or -p/--production');
    return;
  }

  _Env? selected;
  if (wantDev) {
    selected = await _resolveEnv('dev', 'lib/main_dev.dart', 'dev/.env');
    selected ??= await _resolveEnv('development', 'lib/main_development.dart', 'development/.env');
  } else if (wantStaging) {
    selected = await _resolveEnv('staging', 'lib/main_staging.dart', 'staging/.env');
  } else if (wantUat) {
    selected = await _resolveEnv('uat', 'lib/main_uat.dart', 'uat/.env');
  } else if (wantProduction) {
    selected = await _resolveEnv('production', 'lib/main_production.dart', 'production/.env');
  } else {
    // default preference: dev -> staging -> uat -> production
    selected = await _resolveEnv('dev', 'lib/main_dev.dart', 'dev/.env');
    selected ??= await _resolveEnv('development', 'lib/main_development.dart', 'development/.env');
    selected ??= await _resolveEnv('staging', 'lib/main_staging.dart', 'staging/.env');
    selected ??= await _resolveEnv('uat', 'lib/main_uat.dart', 'uat/.env');
    selected ??= await _resolveEnv('production', 'lib/main_production.dart', 'production/.env');
  }

  if (selected == null) {
    LogService.error('No .env found. Expected ./dev/.env, ./staging/.env, ./uat/.env, or ./production/.env');
    return;
  }

  final deviceId = onCommand.isEmpty ? null : onCommand;
  await _runFlutter(selected, deviceId: deviceId);
}