resolve method
Resolves environment settings given optional CLI arguments, environment variables, and configured environments.
Implementation
EnvironmentConfig resolve({
String? cliEnvironment,
String? cliFlavor,
Map<String, String>? cliDartDefines,
Map<String, String> envVars = const {},
Map<String, EnvironmentConfig> configEnvironments = const {},
}) {
// 1. Determine environment name
final envName = cliEnvironment?.trim() ??
envVars['ENVIRONMENT']?.trim() ??
envVars['ENV']?.trim();
if (envName == null || envName.isEmpty) {
// Return default unconfigured environment if none specified
return EnvironmentConfig(
name: 'default',
flavor: cliFlavor?.trim() ?? envVars['FLAVOR']?.trim(),
dartDefines: cliDartDefines ?? {},
);
}
final parsedTarget = TargetEnvironment.parse(envName);
final normalizedName = envName.toLowerCase();
// Find base config from file config if present (matching normalized name or target name)
final baseConfig = configEnvironments[normalizedName] ??
configEnvironments[parsedTarget.name];
// 2. Resolve flavor (CLI > ENV > Config > Target default fallback)
final resolvedFlavor =
cliFlavor?.trim() ?? envVars['FLAVOR']?.trim() ?? baseConfig?.flavor;
// 3. Resolve Fastlane lane (Config > Default matching environment)
final resolvedLane = baseConfig?.lane ??
(parsedTarget == TargetEnvironment.production
? 'production'
: parsedTarget == TargetEnvironment.staging
? 'internal'
: null);
// 4. Resolve Shorebird App ID
final resolvedShorebirdAppId = baseConfig?.shorebirdAppId;
// 5. Merge Dart Defines (Config base overridden by CLI defines)
final mergedDefines = <String, String>{};
if (baseConfig != null) {
mergedDefines.addAll(baseConfig.dartDefines);
}
if (cliDartDefines != null) {
mergedDefines.addAll(cliDartDefines);
}
return EnvironmentConfig(
name: baseConfig?.name ?? normalizedName,
flavor: resolvedFlavor,
lane: resolvedLane,
dartDefines: mergedDefines,
shorebirdAppId: resolvedShorebirdAppId,
);
}