initializeServices static method
Initialize service bridges.
This is Phase 2 of 2-phase initialization (matches Swift completeServicesInitialization):
- Setup HTTP transport (if needed)
- Initialize C++ state (rac_state_initialize with apiKey, baseURL, deviceId)
- Initialize service bridges (ModelAssignment, Platform)
- Model paths base directory (done in RunAnywhere.initializeWithParams)
- Device registration (if needed)
- Flush telemetry
Call this AFTER Phase 1. Can be called in background.
apiKey API key for production/staging
baseURL Backend URL for production/staging
deviceId Device identifier
Implementation
static Future<void> initializeServices({
String? apiKey,
String? baseURL,
String? deviceId,
}) async {
if (!_isInitialized) {
throw StateError('Must call initialize() before initializeServices()');
}
if (_servicesInitialized) {
_logger.debug('Services already initialized, skipping');
return;
}
_logger.debug('Starting Phase 2 services initialization');
// Step 1: Get device ID if not provided
final effectiveDeviceId =
deviceId ?? DartBridgeDevice.cachedDeviceId ?? 'unknown-device';
// Step 2: Initialize C++ state with credentials
// Matches Swift: CppBridge.State.initialize(environment:apiKey:baseURL:deviceId:)
await DartBridgeState.instance.initialize(
environment: _environment,
apiKey: apiKey,
baseURL: baseURL,
deviceId: effectiveDeviceId,
);
_logger.debug('C++ state initialized');
// Step 3: Initialize service bridges
// Matches Swift: CppBridge.initializeServices()
// Step 3a: Model assignment callbacks
// Only auto-fetch in staging/production, not development
final shouldAutoFetch = _environment != SDKEnvironment.development;
await DartBridgeModelAssignment.register(
environment: _environment,
autoFetch: shouldAutoFetch,
);
_logger.debug(
'Model assignment callbacks registered (autoFetch: $shouldAutoFetch)');
// Step 3b: Platform services (Foundation Models, System TTS)
await DartBridgePlatformServices.register();
_logger.debug('Platform services registered');
// Step 4: Flush telemetry (if any queued events)
// Matches Swift: CppBridge.Telemetry.flush()
DartBridgeTelemetry.flush();
_logger.debug('Telemetry flushed');
_servicesInitialized = true;
_logger.info('Phase 2 services initialization complete');
}