initialize method

  1. @override
Future<bool> initialize({
  1. required String appId,
  2. required String endpoint,
  3. bool? logEvents,
  4. bool? compressEvents,
  5. int? sessionTimeoutMs,
  6. int? sendEventIntervalMs,
  7. Map<String, dynamic>? initialGlobalAttributes,
})
override

Initializes the Clickstream Analytics SDK on the web platform.

If options are provided, attempts to call the 3-argument JS initialize method. Otherwise, falls back to the 2-argument version. Returns true if initialization was attempted.

Implementation

@override
Future<bool> initialize({
  required String appId,
  required String endpoint,
  bool? logEvents,
  bool? compressEvents,
  int? sessionTimeoutMs,
  int? sendEventIntervalMs,
  Map<String, dynamic>? initialGlobalAttributes,
}) async {
  final options = <String, dynamic>{
    if (logEvents != null) 'logEvents': logEvents,
    if (compressEvents != null) 'compressEvents': compressEvents,
    if (sessionTimeoutMs != null) 'sessionTimeoutMs': sessionTimeoutMs,
    if (sendEventIntervalMs != null)
      'sendEventIntervalMs': sendEventIntervalMs,
    if (initialGlobalAttributes != null)
      'initialGlobalAttributes': initialGlobalAttributes,
  };

  final jsOptions = options.isNotEmpty ? options.jsify() : null;

  try {
    if (jsOptions != null) {
      // Try to call the 3-argument initialize if available.
      final jsObj = clickstreamAnalytics as JSObject;
      final fn = jsObj.getProperty('initialize'.toJS) as JSFunction?;
      if (fn != null) {
        // callAsFunction takes a JS array of arguments.
        fn.callAsFunction(
          jsObj,
          [appId.toJS, endpoint.toJS, jsOptions].jsify()!,
        );
      } else {
        // Fallback to 2-argument version.
        clickstreamAnalytics?.initialize(appId, endpoint);
      }
    } else {
      clickstreamAnalytics?.initialize(appId, endpoint);
    }
  } catch (_) {
    // Always fallback to 2-argument version if anything fails.
    clickstreamAnalytics?.initialize(appId, endpoint);
  }
  return true;
}