import 'dart:convert'; import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/services.dart'; class AppConfigService { AppConfigService._(); static final AppConfigService instance = AppConfigService._(); bool _initialized = false; Future initialize() async { if (_initialized) return; final configRaw = await rootBundle.loadString('assets/config/runtime_config.json'); final Map config = json.decode(configRaw); await Firebase.initializeApp( options: FirebaseOptions( apiKey: _required(config, 'firebase_api_key'), appId: _required(config, 'firebase_app_id'), messagingSenderId: _required(config, 'firebase_messaging_sender_id'), projectId: _required(config, 'firebase_project_id'), authDomain: _required(config, 'firebase_auth_domain'), storageBucket: _required(config, 'firebase_storage_bucket'), measurementId: _optional(config, 'firebase_measurement_id'), ), ); _initialized = true; } String _required(Map config, String key) { final value = (config[key] ?? '').toString().trim(); if (value.isEmpty || value.startsWith('replace-with-')) { throw StateError('Missing required runtime configuration: $key'); } return value; } String? _optional(Map config, String key) { final value = (config[key] ?? '').toString().trim(); return value.isEmpty ? null : value; } }