Complete reference for all CometChat Flutter SDK real-time listeners including User, Group, Message, Call, Connection, Login, and AI Assistant listeners.
AI Integration Quick Reference
// User Listener — online/offline presenceCometChat.addUserListener("ID", UserListenerImpl());// Message Listener — messages, typing, receipts, reactionsCometChat.addMessageListener("ID", MessageListenerImpl());// Group Listener — member join/leave/kick/ban/scope changesCometChat.addGroupListener("ID", GroupListenerImpl());// Call Listener — incoming/outgoing call eventsCometChat.addCallListener("ID", CallListenerImpl());// Connection Listener — WebSocket connection stateCometChat.addConnectionListener("ID", ConnectionListenerImpl());// Login Listener — authentication state changesCometChat.addLoginListener("ID", LoginListenerImpl());// Always clean up in dispose()CometChat.removeUserListener("ID");CometChat.removeMessageListener("ID");CometChat.removeGroupListener("ID");CometChat.removeCallListener("ID");CometChat.removeConnectionListener("ID");CometChat.removeLoginListener("ID");
Real-time listeners let you receive live events — messages, presence changes, group updates, and call signals — as they happen. The pattern is the same for all listener types:
Create a class that uses the listener mixin with with
Register a listener with a unique ID using addXListener()
Handle events by overriding the callback methods
Remove the listener with removeXListener() when it’s no longer needed
Each listener ID must be unique. Re-registering with the same ID replaces the previous listener. Always remove listeners in your widget’s dispose() method to prevent memory leaks.
Always remove listeners when they’re no longer needed (e.g., in dispose()). Failing to remove listeners can cause memory leaks and duplicate event handling.
Receive events when group members join, leave, are kicked/banned, or have their scope changed.
Method
Description
onGroupMemberJoined(Action action, User joinedUser, Group joinedGroup)
A user joined the group. All members receive this event.
onGroupMemberLeft(Action action, User leftUser, Group leftGroup)
A member left the group. All members receive this event.
onGroupMemberKicked(Action action, User kickedUser, User kickedBy, Group kickedFrom)
A member was kicked. All members including the kicked user receive this event.
onGroupMemberBanned(Action action, User bannedUser, User bannedBy, Group bannedFrom)
A member was banned. All members including the banned user receive this event.
onGroupMemberUnbanned(Action action, User unbannedUser, User unbannedBy, Group unbannedFrom)
A member was unbanned. All group members receive this event.
onGroupMemberScopeChanged(Action action, User updatedBy, User updatedUser, String scopeChangedTo, String scopeChangedFrom, Group group)
A member’s scope was changed. All group members receive this event.
onMemberAddedToGroup(Action action, User addedby, User userAdded, Group addedTo)
A user was added to the group. All members including the added user receive this event.
class MyGroupListener with GroupListener { @override void onGroupMemberJoined(Action action, User joinedUser, Group joinedGroup) { debugPrint("${joinedUser.name} joined ${joinedGroup.name}"); } @override void onGroupMemberLeft(Action action, User leftUser, Group leftGroup) { debugPrint("${leftUser.name} left ${leftGroup.name}"); } @override void onGroupMemberKicked( Action action, User kickedUser, User kickedBy, Group kickedFrom) { debugPrint("${kickedUser.name} was kicked by ${kickedBy.name}"); } @override void onGroupMemberBanned( Action action, User bannedUser, User bannedBy, Group bannedFrom) { debugPrint("${bannedUser.name} was banned by ${bannedBy.name}"); } @override void onGroupMemberUnbanned( Action action, User unbannedUser, User unbannedBy, Group unbannedFrom) { debugPrint("${unbannedUser.name} was unbanned by ${unbannedBy.name}"); } @override void onGroupMemberScopeChanged(Action action, User updatedBy, User updatedUser, String scopeChangedTo, String scopeChangedFrom, Group group) { debugPrint("${updatedUser.name} scope changed to $scopeChangedTo"); } @override void onMemberAddedToGroup( Action action, User addedby, User userAdded, Group addedTo) { debugPrint("${userAdded.name} was added to ${addedTo.name}"); }}// RegisterCometChat.addGroupListener("UNIQUE_LISTENER_ID", MyGroupListener());// Remove when doneCometChat.removeGroupListener("UNIQUE_LISTENER_ID");
Receive real-time streaming events from AI Agent runs. These events arrive as the agent processes a user’s message, before the final persisted messages arrive via the MessageListener.