login method

Future login(
  1. dynamic kmUser
)

Implementation

Future<dynamic> login(dynamic kmUser) async {
  Map<String, dynamic> user = jsonDecode(kmUser);
  Completer completer = Completer();
  String appId = user["appId"];
  String userId = user['userId'];
  Map<String, dynamic> registerUserObjc = {
    "appId": "$appId",
    "automaticChatOpenOnNavigation": true,
    "popupWidget": true,
    "userId": "$userId"
  };
  if (user['password'] != null) {
    registerUserObjc['password'] = user['password'];
  }
  if (user['email'] != null) {
    registerUserObjc['email'] = user['email'];
  }
  if (user['authenticationTypeId'] != null) {
    registerUserObjc['authenticationTypeId'] = user['authenticationTypeId'];
  }

  void loginCallBackFunction(js.JsObject response) {
    completer.complete(response);
  }
  js.context['loginCallBack'] = loginCallBackFunction;

  if (appId.isNotEmpty && userId.isNotEmpty) {
    String jsCode = '''
            try {
                (function(d, m) {
                      var kommunicateSettings = ${jsonEncode(registerUserObjc)};
                      kommunicateSettings["onInit"] = function (){
                                    Kommunicate.displayKommunicateWidget(false);
                                    loginCallBack(JSON.stringify(window.kommunicate._globals));};

                      var s = document.createElement("script");
                      s.type = "text/javascript";
                      s.async = true;
                      s.src = "https://widget.kommunicate.io/v2/kommunicate.app";
                      var h = document.getElementsByTagName("head")[0];
                      h.appendChild(s);
                      window.kommunicate = m;
                      m._globals = kommunicateSettings;
                })(document, window.kommunicate || {});
              } catch (error) {
                      console.error("An error occurred while executing the code:", error);
                      loginCallBack(error);
                    }
              ''';
    await js.context.callMethod('eval', [jsCode]);
  }
  return completer.future;
}