loadFromFile static method
Load configuration from file
Implementation
static Future<SetupConfig?> loadFromFile(String path) async {
final File file = File(path);
if (!file.existsSync()) return null;
final String content = await file.readAsString();
final Map<String, String> values = <String, String>{};
for (final String line in content.split('\n')) {
final String trimmed = line.trim();
if (trimmed.isEmpty || trimmed.startsWith('#')) continue;
final List<String> parts = trimmed.split('=');
if (parts.length >= 2) {
values[parts[0].trim()] = parts.sublist(1).join('=').trim();
}
}
final String templateName = values['TEMPLATE_NAME'] ?? 'arcane_template';
final TemplateType template = TemplateType.values.firstWhere(
(TemplateType t) => t.name == templateName,
orElse: () => TemplateType.arcaneTemplate,
);
final List<String> platforms = _parsePlatforms(values['PLATFORMS'], template);
return SetupConfig(
appName: values['APP_NAME'] ?? 'my_app',
orgDomain: values['ORG_DOMAIN'] ?? 'com.example',
baseClassName: values['BASE_CLASS_NAME'] ?? 'MyApp',
template: template,
outputDir: values['OUTPUT_DIR'] ?? Directory.current.path,
platforms: platforms,
createModels: _parseBool(values['CREATE_MODELS']),
createServer: _parseBool(values['CREATE_SERVER']),
useFirebase: _parseBool(values['USE_FIREBASE']),
firebaseProjectId: values['FIREBASE_PROJECT_ID'],
setupCloudRun: _parseBool(values['SETUP_CLOUD_RUN']),
serviceAccountKeyPath: values['SERVICE_ACCOUNT_KEY'],
deployHostingRelease: _parseOptionalBool(values['DEPLOY_HOSTING_RELEASE']),
deployHostingBeta: _parseOptionalBool(values['DEPLOY_HOSTING_BETA']),
firestoreRegion: values['FIRESTORE_REGION'] ?? 'nam5',
initializeFirestore: _parseBool(values['INITIALIZE_FIRESTORE'], defaultValue: true),
initializeStorage: _parseBool(values['INITIALIZE_STORAGE'], defaultValue: true),
enableEmailAuth: _parseBool(values['ENABLE_EMAIL_AUTH'], defaultValue: true),
enableGoogleAuth: _parseBool(values['ENABLE_GOOGLE_AUTH'], defaultValue: true),
requireBlaze: _parseOptionalBool(values['REQUIRE_BLAZE']),
setupArtifactCleanup: _parseOptionalBool(values['SETUP_ARTIFACT_CLEANUP']),
artifactKeepRecent: _parseInt(values['ARTIFACT_KEEP_RECENT'], defaultValue: 5),
artifactDeleteOlderDays: _parseInt(values['ARTIFACT_DELETE_OLDER_DAYS'], defaultValue: 30),
cloudRunKeepRevisions: _parseInt(values['CLOUD_RUN_KEEP_REVISIONS'], defaultValue: 3),
jasprRenderMode: JasprRenderModeExtension.parse(
values['JASPR_RENDER_MODE'],
),
jasprServerServiceName: values['JASPR_SERVER_SERVICE_NAME'],
embeddedFlutterMount: values['EMBEDDED_FLUTTER_MOUNT'] ?? '/app',
hybridDynamicPrefixes: _parseHybridPrefixes(
values['HYBRID_DYNAMIC_PREFIXES'],
),
);
}