initChannelFunctions method

  1. @override
void initChannelFunctions()
override

Implementation

@override
void initChannelFunctions() {
  JavascriptRuntime.channelFunctionsRegistered[getEngineInstanceId()] = {};
  final setToGlobalObject = evaluate(
    "(key, val) => { this[key] = val; }",
  ).rawResult;
  (setToGlobalObject as JSInvokable).invoke([
    'sendMessage',
    (String channelName, dynamic message) {
      final channelFunctions =
          JavascriptRuntime.channelFunctionsRegistered[getEngineInstanceId()];

      if (channelFunctions == null ||
          !channelFunctions.containsKey(channelName)) {
        FlutterQjsLogger.warning('No channel $channelName registered');
        return null;
      }

      dynamic payload = message;
      if (message is String) {
        try {
          payload = jsonDecode(message);
        } catch (_) {
          payload = message;
        }
      }
      return channelFunctions[channelName]!.call(payload);
    },
  ]);
  (setToGlobalObject as JSRef).free();
}