invokeModule function

String invokeModule(
  1. Pointer<Void> callbackContext,
  2. int contextId,
  3. String moduleName,
  4. String method,
  5. String? params,
  6. DartAsyncModuleCallback callback,
)

Implementation

String invokeModule(
    Pointer<Void> callbackContext, int contextId, String moduleName, String method, String? params, DartAsyncModuleCallback callback) {
  KrakenController controller = KrakenController.getControllerOfJSContextId(contextId)!;
  String result = '';

  try {
    void invokeModuleCallback({String ?error, data}) {
      // To make sure Promise then() and catch() executed before Promise callback called at JavaScript side.
      // We should make callback always async.
      Future.microtask(() {
        if (error != null) {
          Pointer<Utf8> errmsgPtr = error.toNativeUtf8();
          callback(callbackContext, contextId, errmsgPtr, nullptr);
          malloc.free(errmsgPtr);
        } else {
          Pointer<NativeString> dataPtr = stringToNativeString(jsonEncode(data));
          callback(callbackContext, contextId, nullptr, dataPtr);
          freeNativeString(dataPtr);
        }
      });
    }
    result = controller.module.moduleManager.invokeModule(moduleName, method, (params != null && params != '""') ? jsonDecode(params) : null, invokeModuleCallback);
  } catch (e, stack) {
    String error = '$e\n$stack';
    callback(callbackContext, contextId, error.toNativeUtf8(), nullptr);
  }

  return result;
}