onCallJsHandler method

Future onCallJsHandler(
  1. String handlerName,
  2. Map<String, dynamic> data
)

Implementation

Future<dynamic> onCallJsHandler(
  String handlerName,
  Map<String, dynamic> data,
) async {
  final String bridgeSecret = data["_bridgeSecret"];
  final String origin = data["origin"];

  if (_expectedBridgeSecret != bridgeSecret) {
    if (kDebugMode) {
      print(
        "Bridge access attempt with wrong secret token, possibly from malicious code from origin: " +
            origin,
      );
    }
    return null;
  }

  var isOriginAllowed = false;
  var javaScriptHandlersOriginAllowList =
      settings?.javaScriptHandlersOriginAllowList;
  if (javaScriptHandlersOriginAllowList != null) {
    for (String allowedOrigin in javaScriptHandlersOriginAllowList) {
      if (RegExp(allowedOrigin).hasMatch(origin)) {
        isOriginAllowed = true;
        break;
      }
    }
  } else {
    // origin is by default allowed if the allow list is null
    isOriginAllowed = true;
  }
  if (!isOriginAllowed) {
    if (kDebugMode) {
      print("Bridge access attempt from an origin not allowed: " + origin);
    }
    return null;
  }

  var obj = {"handlerName": handlerName, "data": data};
  final result = await _channel?.invokeMethod<String>("onCallJsHandler", obj);
  return result != null ? jsonDecode(result) : null;
}