invokeModuleEvent function

dynamic invokeModuleEvent(
  1. double contextId,
  2. String moduleName,
  3. Event? event,
  4. dynamic extra,
)

Implementation

dynamic invokeModuleEvent(double contextId, String moduleName, Event? event, extra) {
  if (WebFController.getControllerOfJSContextId(contextId) == null) {
    return null;
  }
  Completer<dynamic> completer = Completer();
  WebFController controller = WebFController.getControllerOfJSContextId(contextId)!;

  if (controller.view.disposed) return null;

  Pointer<NativeString> nativeModuleName = stringToNativeString(moduleName);
  Pointer<Void> rawEvent = event == null ? nullptr : event.toRaw().cast<Void>();
  Pointer<NativeValue> extraData = malloc.allocate(sizeOf<NativeValue>());
  toNativeValue(extraData, extra);
  assert(_allocatedPages.containsKey(contextId));

  Pointer<NativeFunction<NativeInvokeModuleCallback>> callback =
      Pointer.fromFunction<NativeInvokeModuleCallback>(_invokeModuleCallback);

  _InvokeModuleCallbackContext callbackContext = _InvokeModuleCallbackContext(completer, controller, extraData);

  scheduleMicrotask(() {
    if (controller.view.disposed) {
      callbackContext.completer.complete(null);
      return;
    }

    _invokeModuleEvent(_allocatedPages[contextId]!, nativeModuleName,
        event == null ? nullptr : event.type.toNativeUtf8(), rawEvent, extraData, callbackContext, callback);
  });

  return completer.future;
}