initialize method

Future<void> initialize({
  1. required SDKEnvironment environment,
  2. String? apiKey,
  3. String? baseURL,
  4. String? deviceId,
})

Initialize C++ state manager

Implementation

Future<void> initialize({
  required SDKEnvironment environment,
  String? apiKey,
  String? baseURL,
  String? deviceId,
}) async {
  try {
    final lib = PlatformLoader.loadCommons();

    // First load secure storage cache for platform adapter
    await loadSecureStorageCache();

    // Initialize state
    final initState = lib.lookupFunction<
        Int32 Function(Int32, Pointer<Utf8>, Pointer<Utf8>, Pointer<Utf8>),
        int Function(int, Pointer<Utf8>, Pointer<Utf8>,
            Pointer<Utf8>)>('rac_state_initialize');

    final envValue = _environmentToInt(environment);
    final apiKeyPtr = (apiKey ?? '').toNativeUtf8();
    final baseURLPtr = (baseURL ?? '').toNativeUtf8();
    final deviceIdPtr = (deviceId ?? '').toNativeUtf8();

    try {
      final result = initState(envValue, apiKeyPtr, baseURLPtr, deviceIdPtr);
      if (result != RacResultCode.success) {
        _logger.warning('State init failed', metadata: {'code': result});
      }
    } finally {
      calloc.free(apiKeyPtr);
      calloc.free(baseURLPtr);
      calloc.free(deviceIdPtr);
    }

    // Register persistence callbacks
    _registerPersistenceCallbacks();

    // Load stored auth from secure storage into C++ state
    await _loadStoredAuth();

    _logger.debug('C++ state initialized');
  } catch (e, stack) {
    _logger.debug('rac_state_initialize error: $e', metadata: {
      'stack': stack.toString(),
    });
  }
}