{"id":"9fa48ea6-3358-419d-a0b9-b12317404900","shortId":"JstjLH","kind":"skill","title":"cometchat-flutter-v5-conversations","tagline":"Use when working with CometChat Flutter UIKit v5 conversation list component. Triggers on CometChatConversations, conversation list, recent chats.","description":"# CometChat Flutter UIKit v5 — Conversations\n\nThe `CometChatConversations` component displays a list of recent conversations.\n\n## Key Props\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `conversationsRequestBuilder` | `ConversationsRequestBuilder?` | — | Custom fetch builder |\n| `conversationsStyle` | `CometChatConversationsStyle` | `const CometChatConversationsStyle()` | Visual styling |\n| `onItemTap` | `Function(Conversation)?` | — | Tap callback (**no BuildContext**) |\n| `onItemLongPress` | `Function(Conversation)?` | — | Long press callback |\n| `subtitleView` | `Widget? Function(BuildContext, Conversation)?` | — | Custom subtitle |\n| `listItemView` | `Widget Function(Conversation)?` | — | Custom list item (replaces the whole row) |\n| `leadingView` | `Widget? Function(BuildContext, Conversation)?` | — | Custom leading widget (avatar slot) |\n| `titleView` | `Widget? Function(BuildContext, Conversation)?` | — | Custom title widget |\n| `trailingView` | `Widget? Function(Conversation)?` | — | Custom trailing widget (single-arg — asymmetric with the other slots) |\n| `title` | `String?` | — | List title |\n| `showBackButton` | `bool` | `false` | Show back button |\n| `onBack` | `VoidCallback?` | — | Back button callback |\n| `hideAppbar` | `bool?` | `false` | Hide app bar |\n| `appBarOptions` | `List<Widget>?` | — | App bar trailing widgets |\n| `usersStatusVisibility` | `bool?` | `true` | Show online status |\n| `receiptsVisibility` | `bool?` | `true` | Show read receipts |\n| `textFormatters` | `List<CometChatTextFormatter>?` | — | Text formatters for subtitles |\n| `controllerTag` | `String?` | — | Custom GetX controller tag |\n| `hideSearch` | `bool?` | — | Hide search bar |\n| `searchReadOnly` | `bool` | `false` | Read-only search |\n| `onSearchTap` | `GestureTapCallback?` | — | Search tap callback |\n| `deleteConversationOptionVisibility` | `bool?` | `true` | Show delete option |\n| `loadingStateView` | `WidgetBuilder?` | — | Custom loading state |\n| `emptyStateView` | `WidgetBuilder?` | — | Custom empty state |\n| `errorStateView` | `WidgetBuilder?` | — | Custom error state |\n| `setOptions` | `Function?` | — | Replace long-press options |\n| `addOptions` | `Function?` | — | Add to long-press options |\n\n## Basic Usage\n\n```dart\nCometChatConversations(\n  onItemTap: (conversation) {\n    User? user;\n    Group? group;\n    if (conversation.conversationWith is User) {\n      user = conversation.conversationWith as User;\n    } else {\n      group = conversation.conversationWith as Group;\n    }\n    Navigator.push(context, MaterialPageRoute(\n      builder: (_) => MessagesScreen(user: user, group: group),\n    ));\n  },\n)\n```\n\n## Custom Request Builder\n\n```dart\nCometChatConversations(\n  conversationsRequestBuilder: ConversationsRequestBuilder()\n    ..limit = 30\n    ..conversationType = ConversationType.user,\n)\n```\n\n## Internal Architecture (GetX)\n\nThe component creates `CometChatConversationsController` via `Get.put()` in `initState()` and deletes it in `dispose()` (unless `controllerTag` is provided externally).\n\nTheme values are cached in `didChangeDependencies()` (unconditionally, no flag):\n```dart\n@override\nvoid didChangeDependencies() {\n  typography = CometChatThemeHelper.getTypography(context);\n  colorPalette = CometChatThemeHelper.getColorPalette(context);\n  spacing = CometChatThemeHelper.getSpacing(context);\n  style = CometChatThemeHelper.getTheme<CometChatConversationsStyle>(\n      context: context, defaultTheme: CometChatConversationsStyle.of)\n    .merge(widget.conversationsStyle);\n  super.didChangeDependencies();\n}\n```\n\n## Anti-Patterns\n\n```dart\n// ❌ WRONG — trying to access controller before component mounts\nfinal controller = Get.find<CometChatConversationsController>();\n\n// ❌ WRONG — manually creating controller outside the widget\nGet.put(CometChatConversationsController(...));\n\n// ❌ WRONG — not extracting User/Group from conversation\nonItemTap: (conversation) {\n  Navigator.push(context, MaterialPageRoute(\n    builder: (_) => MessagesScreen(user: conversation.conversationWith), // Type error\n  ));\n}\n```\n\n## Checklist — Conversations\n\n- [ ] `onItemTap` extracts `User`/`Group` from `conversation.conversationWith` with type check\n- [ ] Navigation to messages screen passes extracted `user` or `group`\n- [ ] Let the widget manage its own GetX controller lifecycle","tags":["cometchat","flutter","conversations","skills","agent-skills","ai-agent","chat","claude-code","cursor","messaging","nextjs","react"],"capabilities":["skill","source-cometchat","skill-cometchat-flutter-v5-conversations","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-conversations","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,361 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:49.797Z","embedding":null,"createdAt":"2026-05-07T13:05:09.094Z","updatedAt":"2026-05-18T19:04:49.797Z","lastSeenAt":"2026-05-18T19:04:49.797Z","tsv":"'30':263 'access':325 'add':217 'addopt':215 'anti':319 'anti-pattern':318 'app':138,142 'appbaropt':140 'architectur':267 'arg':113 'asymmetr':114 'avatar':94 'back':127,131 'bar':139,143,174 'basic':223 'bool':124,135,147,153,171,176,188 'buildcontext':61,71,89,99 'builder':48,249,257,353 'button':128,132 'cach':290 'callback':59,67,133,186 'chat':23 'check':369 'checklist':359 'colorpalett':303 'cometchat':2,10,24 'cometchat-flutter-v5-conversations':1 'cometchatconvers':19,30,226,259 'cometchatconversationscontrol':272,341 'cometchatconversationsstyl':50,52 'cometchatconversationsstyle.of':314 'cometchatthemehelper.getcolorpalette':304 'cometchatthemehelper.getspacing':307 'cometchatthemehelper.gettheme':310 'cometchatthemehelper.gettypography':301 'compon':16,31,270,328 'const':51 'context':247,302,305,308,311,312,351 'control':168,326,331,336,386 'controllertag':164,283 'convers':5,14,20,28,37,57,64,72,78,90,100,107,228,347,349,360 'conversation.conversationwith':234,238,243,356,366 'conversationsrequestbuild':44,45,260,261 'conversationsstyl':49 'conversationtyp':264 'conversationtype.user':265 'creat':271,335 'custom':46,73,79,91,101,108,166,195,200,205,255 'dart':225,258,296,321 'default':42 'defaultthem':313 'delet':191,278 'deleteconversationoptionvis':187 'descript':43 'didchangedepend':292,299 'display':32 'dispos':281 'els':241 'empti':201 'emptystateview':198 'error':206,358 'errorstateview':203 'extern':286 'extract':344,362,375 'fals':125,136,177 'fetch':47 'final':330 'flag':295 'flutter':3,11,25 'formatt':161 'function':56,63,70,77,88,98,106,209,216 'gesturetapcallback':183 'get.find':332 'get.put':274,340 'getx':167,268,385 'group':231,232,242,245,253,254,364,378 'hide':137,172 'hideappbar':134 'hidesearch':170 'initst':276 'intern':266 'item':81 'key':38 'lead':92 'leadingview':86 'let':379 'lifecycl':387 'limit':262 'list':15,21,34,80,121,141,159 'listitemview':75 'load':196 'loadingstateview':193 'long':65,212,220 'long-press':211,219 'manag':382 'manual':334 'materialpagerout':248,352 'merg':315 'messag':372 'messagesscreen':250,354 'mount':329 'navig':370 'navigator.push':246,350 'onback':129 'onitemlongpress':62 'onitemtap':55,227,348,361 'onlin':150 'onsearchtap':182 'option':192,214,222 'outsid':337 'overrid':297 'pass':374 'pattern':320 'press':66,213,221 'prop':39,40 'provid':285 'read':156,179 'read-on':178 'receipt':157 'receiptsvis':152 'recent':22,36 'replac':82,210 'request':256 'row':85 'screen':373 'search':173,181,184 'searchreadon':175 'setopt':208 'show':126,149,155,190 'showbackbutton':123 'singl':112 'single-arg':111 'skill' 'skill-cometchat-flutter-v5-conversations' 'slot':95,118 'source-cometchat' 'space':306 'state':197,202,207 'status':151 'string':120,165 'style':54,309 'subtitl':74,163 'subtitleview':68 'super.didchangedependencies':317 'tag':169 'tap':58,185 'text':160 'textformatt':158 'theme':287 'titl':102,119,122 'titleview':96 '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' 'trail':109,144 'trailingview':104 'tri':323 'trigger':17 'true':148,154,189 'type':41,357,368 'typographi':300 'uikit':12,26 'uncondit':293 'unless':282 'usag':224 'use':6 'user':229,230,236,237,240,251,252,355,363,376 'user/group':345 'usersstatusvis':146 'v5':4,13,27 'valu':288 'via':273 'visual':53 'void':298 'voidcallback':130 'whole':84 'widget':69,76,87,93,97,103,105,110,145,339,381 'widget.conversationsstyle':316 'widgetbuild':194,199,204 'work':8 'wrong':322,333,342","prices":[{"id":"8594771a-c4b0-4285-9e36-9a7498c0225b","listingId":"9fa48ea6-3358-419d-a0b9-b12317404900","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.094Z"}],"sources":[{"listingId":"9fa48ea6-3358-419d-a0b9-b12317404900","source":"github","sourceId":"cometchat/cometchat-skills/cometchat-flutter-v5-conversations","sourceUrl":"https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-flutter-v5-conversations","isPrimary":false,"firstSeenAt":"2026-05-07T13:05:09.094Z","lastSeenAt":"2026-05-18T19:04:49.797Z"}],"details":{"listingId":"9fa48ea6-3358-419d-a0b9-b12317404900","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"cometchat","slug":"cometchat-flutter-v5-conversations","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":"2ab2542e7ac63af3c32f9492c5e19e8a7d45de96","skill_md_path":"skills/cometchat-flutter-v5-conversations/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-flutter-v5-conversations"},"layout":"multi","source":"github","category":"cometchat-skills","frontmatter":{"name":"cometchat-flutter-v5-conversations","license":"MIT","description":"Use when working with CometChat Flutter UIKit v5 conversation list component. Triggers on CometChatConversations, conversation list, recent chats.","compatibility":"cometchat_chat_uikit ^5.2.14; cometchat_uikit_shared ^5.2.3"},"skills_sh_url":"https://skills.sh/cometchat/cometchat-skills/cometchat-flutter-v5-conversations"},"updatedAt":"2026-05-18T19:04:49.797Z"}}