invokeModuleEvent function
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;
}