addMessageListener<T> method

Future<void> addMessageListener<T>(
  1. void callback(
    1. T? response
    ), {
  2. void onError(
    1. String error
    )?,
  3. String? selector,
})

Implementation

Future<void> addMessageListener<T>(void callback(T? response),
    {void onError(String error)?, String? selector}) {
  String messageType;
  Function handleResponse;

  if (T == String || T == PublishMessageInfo) {
    messageType = T.toString();
    handleResponse = callback;
  } else {
    messageType = "Map";
    if (T == Map) {
      handleResponse = callback;
    } else {
      handleResponse = (map) {
        callback(reflector.deserialize<T>(map));
      };
    }
  }

  Map<String, dynamic> args = {
    "selector": selector,
    "messageType": messageType,
  };
  return _methodChannel
      .invokeMethod("Backendless.Messaging.Channel.addMessageListener",
          <String, dynamic>{"channelHandle": _channelHandle}..addAll(args))
      .then((handle) => BackendlessMessaging._messageCallbacks[handle] =
          new EventCallback(handleResponse, onError, args));
}