initialize static method

Future<CloudXConfiguration?> initialize({
  1. required String appKey,
})

Initializes the SDK with the provided appKey.

Returns a CloudXConfiguration on success, or null on failure.

Implementation

static Future<CloudXConfiguration?> initialize({
  required String appKey,
}) async {
  if (_hasInitializeBeenCalled) {
    return _initializeCompleter?.future ?? Future.value(null);
  }
  _hasInitializeBeenCalled = true;
  _initializeCompleter = Completer<CloudXConfiguration?>();

  _methodChannel.setMethodCallHandler(_handleNativeMethodCall);

  try {
    // Hot restart detection - check if native SDK already initialized
    final isPlatformSDKInitialized = await isInitialized();
    if (isPlatformSDKInitialized) {
      _log('SDK already initialized (hot restart detected)');
      _initializeCompleter!.complete(const CloudXConfiguration());
      return _initializeCompleter!.future;
    }

    final result = await _invokeMethod<bool>('initialize', {
      'appKey': appKey,
      'pluginVersion': 'flutter-$_pluginVersion',
    });

    final success = result ?? false;
    _initializeCompleter!
        .complete(success ? const CloudXConfiguration() : null);
    return _initializeCompleter!.future;
  } catch (e) {
    _log('Initialization failed: $e');
    if (!_initializeCompleter!.isCompleted) {
      _initializeCompleter!.complete(null);
    }
    return null;
  }
}