fetchAndExecuteJavaScript function

Future<void> fetchAndExecuteJavaScript(
  1. String txnId,
  2. String clientId,
  3. String env
)

Implementation

Future<void> fetchAndExecuteJavaScript(
    String txnId, String clientId, String env) async {
  void execInit() {
    String jsCode = '''
           window.isInitialized = false;
           function init(){
                window.DeviceIntelligence.init({
                    credentialId: '$clientId',
                    userId: '',
                    environment: '$env'
              });
              window.isInitialized = true;
           }
           if( window.DeviceIntelligence){
             init();
           }
      ''';
    js.context.callMethod('eval', [jsCode]);
  }

  void loadScript() {
    String url =
        'https://di.prd.bureau.id/v1.2.5/bureau-device-intelligence.js';
    if (env == 'SANDBOX') {
      url = 'https://di.stg.bureau.id/v1.2.5/bureau-device-intelligence.js';
    }
    ScriptElement script = ScriptElement();
    script.src = url;
    script.onLoad.listen((event) {
      execInit();
    });
    document.body?.append(script);
  }

  try {
    String checkScriptLoaded = '''
            !!window.DeviceIntelligence;
    ''';
    bool isScriptLoaded = js.context.callMethod('eval', [checkScriptLoaded]);

    if (!isScriptLoaded) {
      loadScript();
    } else {
      execInit();
    }
  } catch (e) {
    if (kDebugMode) {
      print('Error fetching or executing JavaScript: $e');
    }
  }
}