Set default portal port to 8081, fix Dart build issue in cart screen, and update setup documentation. Co-Authored-By: Oz <oz-agent@warp.dev>
48 lines
1.5 KiB
Dart
48 lines
1.5 KiB
Dart
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<void> initialize() async {
|
|
if (_initialized) return;
|
|
|
|
final configRaw =
|
|
await rootBundle.loadString('assets/config/runtime_config.json');
|
|
final Map<String, dynamic> 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<String, dynamic> 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<String, dynamic> config, String key) {
|
|
final value = (config[key] ?? '').toString().trim();
|
|
return value.isEmpty ? null : value;
|
|
}
|
|
}
|