remove method

void remove(
  1. ResultCallback receiver, {
  2. String? key,
  3. Object? context,
})

移除指定的接收者 receiver。 如果指定了 keycontext 将有助于更快的移除指定接收者。 receiver - 接收者 key - 消息类型 context - 环境。

Remove the specified receiver receiver. If key and context are specified, it will help to remove the specified recipient faster. receiver - receiver key-message type context - context.

Implementation

void remove(ResultCallback receiver, {String? key, Object? context}) {
  if (_map == null) return;
  if (receiver == null) return;
  if (!_textIsEmpty(key)) {
    _get(key!).removeListener(receiver);
  } else {
    _map.forEach((k, value) {
      value.removeListener(receiver);
    });
  }
  _cleanMap();
  if (context != null) {
    _getReceivers(context).remove(receiver);
    if (_getReceivers(context).isEmpty) {
      _receiverCache.remove(context);
    }
  } else {
    List<Object?> needRemove = [];
    _receiverCache.forEach((k, value) {
      value.remove(receiver);
      if (value.isEmpty) needRemove.add(k);
    });
    needRemove.forEach((k) {
      _receiverCache.remove(k);
    });
  }
}