trigger method
void
trigger(
- String type, [
- dynamic payload,
- String? ref
])
Implementation
void trigger(String type, [dynamic payload, String? ref]) {
final typeLower = type.toLowerCase();
final events = [
ChannelEvents.close,
ChannelEvents.error,
ChannelEvents.leave,
ChannelEvents.join,
].map((e) => e.eventName()).toSet();
if (ref != null && events.contains(typeLower) && ref != joinRef) {
return;
}
var handledPayload = onMessage(typeLower, payload, ref);
if (payload != null && handledPayload == null) {
throw 'channel onMessage callbacks must return the payload, modified or unmodified';
}
if (['insert', 'update', 'delete'].contains(typeLower)) {
final bindings = _bindings['postgres_changes']?.where((bind) {
return (bind.filter['event'] == '*' ||
bind.filter['event']?.toLowerCase() == typeLower);
});
for (final bind in (bindings ?? <Binding>[])) {
handledPayload = getEnrichedPayload(handledPayload);
bind.callback(handledPayload, ref);
}
} else {
final bindings = (_bindings[typeLower] ?? []).where((bind) {
if (['broadcast', 'presence', 'postgres_changes'].contains(typeLower)) {
final bindId = bind.id;
if (bindId != null) {
final bindEvent = bind.filter['event'];
return ((payload['ids'] as List?)?.contains(int.parse(bindId)) ==
true &&
(bindEvent == '*' ||
bindEvent?.toLowerCase() ==
(payload['data']?['type'] as String?)?.toLowerCase()));
} else {
final bindEvent = bind.filter['event']?.toLowerCase();
return (bindEvent == '*' ||
bindEvent == (payload?['event'] as String?)?.toLowerCase());
}
} else {
return bind.type.toLowerCase() == typeLower;
}
});
for (final bind in bindings) {
if (handledPayload is Map<String, dynamic> &&
handledPayload.keys.contains('ids')) {
handledPayload = getEnrichedPayload(handledPayload);
}
bind.callback(handledPayload, ref);
}
}
}