{"id":"e5ae4db8-9e40-4e26-8c8e-5e028ba2330a","shortId":"pEajrb","kind":"skill","title":"cometchat-flutter-v5-events","tagline":"Use when working with CometChat Flutter UIKit v5 event system. Triggers on CometChatMessageEvents, CometChatUserEvents, CometChatGroupEvents, CometChatCallEvents, CometChatUIEvents, listeners.","description":"# CometChat Flutter UIKit v5 — Events\n\nTwo layers: SDK listeners (low-level) and UIKit events (high-level component coordination).\n\n## Event System Architecture\n\n### Layer 1: SDK Listeners (CometChat SDK)\nRaw message/call/user/group events from the network.\n\n### Layer 2: UIKit Events (CometChat UIKit)\nHigh-level events emitted by UIKit components for UI coordination. Use a static `Map<String, Listener>` pattern.\n\n## Listener Registration Pattern\n\nAll event classes follow the same register/remove pattern:\n\n```dart\n// ✅ CORRECT — register in initState, remove in dispose\nclass _MyWidgetState extends State<MyWidget> {\n  late final String _listenerId;\n\n  @override\n  void initState() {\n    super.initState();\n    _listenerId = 'my_widget_${DateTime.now().millisecondsSinceEpoch}';\n\n    // UIKit events\n    CometChatMessageEvents.addMessagesListener(_listenerId, this);\n    CometChatUIEvents.addUiListener(_listenerId, this);\n\n    // SDK listeners\n    CometChat.addMessageListener(_listenerId, this);\n    CometChat.addUserListener(_listenerId, this);\n    CometChat.addGroupListener(_listenerId, this);\n    CometChat.addCallListener(_listenerId, this);\n  }\n\n  @override\n  void dispose() {\n    CometChatMessageEvents.removeMessagesListener(_listenerId);\n    CometChatUIEvents.removeUiListener(_listenerId);\n    CometChat.removeMessageListener(_listenerId);\n    CometChat.removeUserListener(_listenerId);\n    CometChat.removeGroupListener(_listenerId);\n    CometChat.removeCallListener(_listenerId);\n    super.dispose();\n  }\n}\n```\n\nFor GetxController, use `onInit()` / `onClose()` instead of `initState()` / `dispose()`.\n\n## UIKit Event Classes — Registration\n\n| Class | Register | Remove |\n|-------|----------|--------|\n| `CometChatMessageEvents` | `addMessagesListener(id, listener)` | `removeMessagesListener(id)` |\n| `CometChatUserEvents` | `addUsersListener(id, listener)` | `removeUsersListener(id)` |\n| `CometChatGroupEvents` | `addGroupsListener(id, listener)` | `removeGroupsListener(id)` |\n| `CometChatCallEvents` | `addCallEventsListener(id, listener)` | `removeCallEventsListener(id)` |\n| `CometChatUIEvents` | `addUiListener(id, listener)` | `removeUiListener(id)` |\n| `CometChatConversationEvents` | `addConversationListListener(id, listener)` | `removeConversationListListener(id)` |\n\n## SDK Listeners — Registration\n\n| Listener | Register | Remove |\n|----------|----------|--------|\n| Messages | `CometChat.addMessageListener(id, this)` | `CometChat.removeMessageListener(id)` |\n| Users (online/offline) | `CometChat.addUserListener(id, this)` | `CometChat.removeUserListener(id)` |\n| Groups | `CometChat.addGroupListener(id, this)` | `CometChat.removeGroupListener(id)` |\n| Calls | `CometChat.addCallListener(id, this)` | `CometChat.removeCallListener(id)` |\n| Connection | `CometChat.addConnectionListener(id, this)` | `CometChat.removeConnectionListener(id)` |\n\n## Key UIKit Events (commonly used)\n\n**CometChatUIEvents:**\n- `openChat(User? user, Group? group)` — request to open a chat\n\n**CometChatMessageEvents:**\n- `ccMessageSent(BaseMessage message, MessageStatus status)` — message sent\n- `ccMessageEdited(BaseMessage message, MessageEditStatus status)` — message edited\n- `ccMessageDeleted(BaseMessage message, EventStatus status)` — message deleted\n\n**CometChatUserEvents:**\n- `ccUserBlocked(User user)` / `ccUserUnblocked(User user)`\n\n**CometChatGroupEvents:**\n- `ccGroupMemberKicked`, `ccGroupMemberBanned`, `ccGroupMemberAdded`, `ccOwnershipChanged`\n\n**CometChatCallEvents:**\n- `ccOutgoingCall(Call)`, `ccCallAccepted(Call)`, `ccCallRejected(Call)`, `ccCallEnded(Call)`\n\n## UIKit Events vs SDK Listeners\n\n- **UIKit events** — react to UIKit-level actions (message sent via composer, group created via UI, user blocked via UI)\n- **SDK listeners** — raw network events (message received, user online/offline, group member joined)\n- UIKit components internally use both\n\n## Gotchas\n\n### Unique Listener IDs\n```dart\n// ❌ WRONG — hardcoded ID\nCometChat.addMessageListener('messages', this);\n\n// ✅ CORRECT — unique ID\nfinal id = 'messages_${DateTime.now().millisecondsSinceEpoch}';\nCometChat.addMessageListener(id, this);\n```\n\n### Always Remove in dispose()\n```dart\n// ❌ WRONG — listener leaks\n@override\nvoid dispose() {\n  super.dispose();\n}\n\n// ✅ CORRECT\n@override\nvoid dispose() {\n  CometChat.removeMessageListener(_listenerId);\n  super.dispose();\n}\n```\n\n### Never Register in build()\n```dart\n// ❌ WRONG — called every rebuild\n@override\nWidget build(BuildContext context) {\n  CometChat.addMessageListener(id, this);\n  return Container();\n}\n```\n\n## Checklist — Events\n\n- [ ] Listener ID is unique (use timestamp or hashCode)\n- [ ] Listener registered in `initState()` / `onInit()`, not `build()`\n- [ ] Listener removed in `dispose()` / `onClose()` with same ID\n- [ ] UIKit events for UI coordination, SDK listeners for raw events\n- [ ] `subscriptionType` set in UIKitSettings for presence events to work","tags":["cometchat","flutter","events","skills","agent-skills","ai-agent","chat","claude-code","cursor","messaging","nextjs","react"],"capabilities":["skill","source-cometchat","skill-cometchat-flutter-v5-events","topic-agent-skills","topic-ai-agent","topic-chat","topic-claude-code","topic-cometchat","topic-cursor","topic-messaging","topic-nextjs","topic-react","topic-react-native","topic-ui-kit"],"categories":["cometchat-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/cometchat/cometchat-skills/cometchat-flutter-v5-events","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add cometchat/cometchat-skills","source_repo":"https://github.com/cometchat/cometchat-skills","install_from":"skills.sh"}},"qualityScore":"0.463","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 27 github stars · SKILL.md body (4,925 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:04:50.113Z","embedding":null,"createdAt":"2026-05-07T13:05:09.522Z","updatedAt":"2026-05-18T19:04:50.113Z","lastSeenAt":"2026-05-18T19:04:50.113Z","tsv":"'1':48 '2':60 'action':317 'addcalleventslisten':192 'addconversationlistlisten':204 'addgroupslisten':186 'addmessageslisten':174 'adduilisten':198 'adduserslisten':180 'alway':369 'architectur':46 'basemessag':264,271,278 'block':327 'build':391,399,423 'buildcontext':400 'call':234,298,300,302,304,394 'cccallaccept':299 'cccallend':303 'cccallreject':301 'ccgroupmemberad':294 'ccgroupmemberban':293 'ccgroupmemberkick':292 'ccmessagedelet':277 'ccmessageedit':270 'ccmessages':263 'ccoutgoingcal':297 'ccownershipchang':295 'ccuserblock':285 'ccuserunblock':288 'chat':261 'checklist':407 'class':88,102,168,170 'cometchat':2,10,24,51,63 'cometchat-flutter-v5-events':1 'cometchat.addcalllistener':138,235 'cometchat.addconnectionlistener':241 'cometchat.addgrouplistener':135,229 'cometchat.addmessagelistener':129,216,355,366,402 'cometchat.adduserlistener':132,223 'cometchat.removecalllistener':154,238 'cometchat.removeconnectionlistener':244 'cometchat.removegrouplistener':152,232 'cometchat.removemessagelistener':148,219,385 'cometchat.removeuserlistener':150,226 'cometchatcallev':21,191,296 'cometchatconversationev':203 'cometchatgroupev':20,185,291 'cometchatmessageev':18,173,262 'cometchatmessageevents.addmessageslistener':121 'cometchatmessageevents.removemessageslistener':144 'cometchatuiev':22,197,251 'cometchatuievents.adduilistener':124 'cometchatuievents.removeuilistener':146 'cometchatuserev':19,179,284 'common':249 'compon':42,72,343 'compos':321 'connect':240 'contain':406 'context':401 'coordin':43,75,436 'correct':95,358,381 'creat':323 'dart':94,351,373,392 'datetime.now':117,364 'delet':283 'dispos':101,143,165,372,379,384,427 'edit':276 'emit':69 'event':5,14,28,38,44,55,62,68,87,120,167,248,306,311,334,408,433,441,448 'eventstatus':280 'everi':395 'extend':104 'final':107,361 'flutter':3,11,25 'follow':89 'getxcontrol':158 'gotcha':347 'group':228,255,256,322,339 'hardcod':353 'hashcod':416 'high':40,66 'high-level':39,65 'id':175,178,181,184,187,190,193,196,199,202,205,208,217,220,224,227,230,233,236,239,242,245,350,354,360,362,367,403,410,431 'initst':98,112,164,420 'instead':162 'intern':344 'join':341 'key':246 'late':106 'layer':30,47,59 'leak':376 'level':35,41,67,316 'listen':23,32,50,81,83,128,176,182,188,194,200,206,210,212,309,331,349,375,409,417,424,438 'listenerid':109,114,122,125,130,133,136,139,145,147,149,151,153,155,386 'low':34 'low-level':33 'map':79 'member':340 'messag':215,265,268,272,275,279,282,318,335,356,363 'message/call/user/group':54 'messageeditstatus':273 'messagestatus':266 'millisecondssinceepoch':118,365 'mywidgetst':103 'network':58,333 'never':388 'onclos':161,428 'oninit':160,421 'online/offline':222,338 'open':259 'openchat':252 'overrid':110,141,377,382,397 'pattern':82,85,93 'presenc':447 'raw':53,332,440 'react':312 'rebuild':396 'receiv':336 'regist':96,171,213,389,418 'register/remove':92 'registr':84,169,211 'remov':99,172,214,370,425 'removecalleventslisten':195 'removeconversationlistlisten':207 'removegroupslisten':189 'removemessageslisten':177 'removeuilisten':201 'removeuserslisten':183 'request':257 'return':405 'sdk':31,49,52,127,209,308,330,437 'sent':269,319 'set':443 'skill' 'skill-cometchat-flutter-v5-events' 'source-cometchat' 'state':105 'static':78 'status':267,274,281 'string':80,108 'subscriptiontyp':442 'super.dispose':156,380,387 'super.initstate':113 'system':15,45 'timestamp':414 'topic-agent-skills' 'topic-ai-agent' 'topic-chat' 'topic-claude-code' 'topic-cometchat' 'topic-cursor' 'topic-messaging' 'topic-nextjs' 'topic-react' 'topic-react-native' 'topic-ui-kit' 'trigger':16 'two':29 'ui':74,325,329,435 'uikit':12,26,37,61,64,71,119,166,247,305,310,315,342,432 'uikit-level':314 'uikitset':445 'uniqu':348,359,412 'use':6,76,159,250,345,413 'user':221,253,254,286,287,289,290,326,337 'v5':4,13,27 'via':320,324,328 'void':111,142,378,383 'vs':307 'widget':116,398 'work':8,450 'wrong':352,374,393","prices":[{"id":"47b1e8b8-b58b-425e-aae6-e5fb74a46126","listingId":"e5ae4db8-9e40-4e26-8c8e-5e028ba2330a","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"cometchat","category":"cometchat-skills","install_from":"skills.sh"},"createdAt":"2026-05-07T13:05:09.522Z"}],"sources":[{"listingId":"e5ae4db8-9e40-4e26-8c8e-5e028ba2330a","source":"github","sourceId":"cometchat/cometchat-skills/cometchat-flutter-v5-events","sourceUrl":"https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-flutter-v5-events","isPrimary":false,"firstSeenAt":"2026-05-07T13:05:09.522Z","lastSeenAt":"2026-05-18T19:04:50.113Z"}],"details":{"listingId":"e5ae4db8-9e40-4e26-8c8e-5e028ba2330a","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"cometchat","slug":"cometchat-flutter-v5-events","github":{"repo":"cometchat/cometchat-skills","stars":27,"topics":["agent-skills","ai-agent","chat","claude-code","cometchat","cursor","messaging","nextjs","react","react-native","ui-kit"],"license":null,"html_url":"https://github.com/cometchat/cometchat-skills","pushed_at":"2026-05-18T05:04:24Z","description":"Add CometChat chat to any React, Next.js, React Native, Angular, Android, iOS, or Flutter project through your AI coding agent. Works with Claude Code, Cursor, Codex, VS Code Copilot, Windsurf, Cline, Kiro, and 50+ more agents.","skill_md_sha":"a0271f0d31643646e4a101ab9e3c0e62e1b44f94","skill_md_path":"skills/cometchat-flutter-v5-events/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-flutter-v5-events"},"layout":"multi","source":"github","category":"cometchat-skills","frontmatter":{"name":"cometchat-flutter-v5-events","license":"MIT","description":"Use when working with CometChat Flutter UIKit v5 event system. Triggers on CometChatMessageEvents, CometChatUserEvents, CometChatGroupEvents, CometChatCallEvents, CometChatUIEvents, listeners.","compatibility":"cometchat_uikit_shared ^5.2.3; cometchat_sdk ^4.1.2"},"skills_sh_url":"https://skills.sh/cometchat/cometchat-skills/cometchat-flutter-v5-events"},"updatedAt":"2026-05-18T19:04:50.113Z"}}