{"id":"70f0ad30-c1eb-4f2e-b20a-5bbca65557f6","shortId":"VAXeyc","kind":"skill","title":"cometchat-flutter-v5","tagline":"Use when building chat with CometChat Flutter UIKit v5 (cometchat_chat_uikit v5.2.14, cometchat_calls_uikit v5.0.15). Orchestrator skill that routes to feature-specific skills.","description":"# CometChat Flutter UIKit v5 — Orchestrator\n\nEntry point skill for the CometChat UIKit v5 packages. Routes to feature skills based on context.\n\n## Project Detection\n\nConfirm the project uses CometChat UIKit v5 by checking `pubspec.yaml` for:\n\n```yaml\ndependencies:\n  cometchat_chat_uikit: ^5.2.14\n  cometchat_calls_uikit: ^5.0.15  # Optional, for calling features\n```\n\nThe v5 uses **separate packages** (unlike v6 which bundles everything):\n- `cometchat_chat_uikit` — Chat UI components\n- `cometchat_calls_uikit` — Call UI components (re-exports `cometchat_uikit_shared` + `cometchat_sdk` + `cometchat_calls_sdk`; does NOT re-export `cometchat_chat_uikit`)\n- `cometchat_uikit_shared` — Shared utilities\n\n**Imports — two barrels, not one.** For chat-only apps, the chat barrel is sufficient. If you also need voice/video calls, add a SECOND import — the calls barrel does NOT re-export the chat barrel.\n\n```dart\n// Always:\nimport 'package:cometchat_chat_uikit/cometchat_chat_uikit.dart';\n\n// Add this only if your app uses calls:\nimport 'package:cometchat_calls_uikit/cometchat_calls_uikit.dart';\n```\n\n## Key v5 vs v6 Differences\n\n| Aspect | v5 | v6 |\n|--------|----|----|\n| State management | GetX (GetBuilder, GetxController) | BLoC (Bloc, Equatable) |\n| Packages | Separate (chat_uikit + calls_uikit) | Single (cometchat_chat_uikit) |\n| Controllers | `Get.put()` internally | ServiceLocator pattern |\n| SDK | `cometchat_sdk ^4.1.2` | `cometchat_sdk ^5.0.0` |\n\n## Skill Routing\n\n| User mentions | Route to skill |\n|---------------|---------------|\n| init, login, logout, UIKitSettings, setup, GetX, GetBuilder | `cometchat-flutter-v5-core` |\n| theme, colors, dark mode, styling, CometChatColorPalette, merge() | `cometchat-flutter-v5-theming` |\n| conversations, conversation list, recent chats | `cometchat-flutter-v5-conversations` |\n| messages, message list, composer, compact composer, header, keyboard, threads | `cometchat-flutter-v5-messages` |\n| users, groups, group members, contacts, CometChatChangeScope | `cometchat-flutter-v5-users-groups` |\n| calls, voice call, video call, CometChatCallButtons, incoming call, call logs | `cometchat-flutter-v5-calls` |\n| events, listeners, real-time, typing indicator, online status, receipts | `cometchat-flutter-v5-events` |\n| custom bubbles, templates, DataSource, decorator, formatters, slot views, extensions | `cometchat-flutter-v5-customization` |\n| push notifications, FCM, APNs, VoIP, token, firebase messaging, callkit | `cometchat-flutter-v5-push` |\n| auth tokens, ProGuard, release build, security, environment, production | `cometchat-flutter-v5-production` |\n| error, debug, not working, crash, fix, troubleshoot, verify | `cometchat-flutter-v5-troubleshooting` |\n\n## Architecture Overview\n\nThe UIKit v5 follows a **GetX controller pattern**:\n\n```\n{component}/\n├── cometchat_{component}.dart              # StatefulWidget\n├── cometchat_{component}_controller.dart   # extends GetxController\n├── cometchat_{component}_style.dart        # ThemeExtension with merge()\n└── {component}_builder_protocol.dart       # Request builder protocol\n```\n\n## Golden Path — Minimal Chat App (v5)\n\n```dart\nimport 'package:flutter/material.dart';\nimport 'package:cometchat_chat_uikit/cometchat_chat_uikit.dart';\n// Add the calls import only if your app uses voice/video calls:\n// import 'package:cometchat_calls_uikit/cometchat_calls_uikit.dart';\n\nconst String appId = 'YOUR_APP_ID';\nconst String region = 'us';\nconst String authKey = 'YOUR_AUTH_KEY';\n\nvoid main() => runApp(const MyApp());\n\nclass MyApp extends StatefulWidget {\n  const MyApp({super.key});\n  @override\n  State<MyApp> createState() => _MyAppState();\n}\n\nclass _MyAppState extends State<MyApp> {\n  bool _initializing = true;\n  bool _loggedIn = false;\n\n  @override\n  void initState() {\n    super.initState();\n    _initCometChat();\n  }\n\n  void _initCometChat() {\n    final settings = (UIKitSettingsBuilder()\n          ..appId = appId\n          ..region = region\n          ..authKey = authKey\n          ..subscriptionType = CometChatSubscriptionType.allUsers\n          ..callingExtension = CometChatCallingExtension())\n        .build();\n\n    CometChatUIKit.init(\n      uiKitSettings: settings,\n      onSuccess: (_) {\n        setState(() {\n          _loggedIn = CometChatUIKit.loggedInUser != null;\n          _initializing = false;\n        });\n      },\n      onError: (e) {\n        debugPrint('Init failed: ${e.message}');\n        setState(() => _initializing = false);\n      },\n    );\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      navigatorKey: CallNavigationContext.navigatorKey,\n      home: _initializing\n          ? const Scaffold(body: Center(child: CircularProgressIndicator()))\n          : _loggedIn\n              ? HomeScreen()\n              : LoginScreen(),\n    );\n  }\n}\n```\n\nKey points:\n- Always import `package:cometchat_chat_uikit/cometchat_chat_uikit.dart` for chat widgets; add `package:cometchat_calls_uikit/cometchat_calls_uikit.dart` as a second import only when using calls\n- `CometChatUIKit.login(uid)` takes a String directly\n- `CallNavigationContext.navigatorKey` set on MaterialApp\n- `CometChatCallingExtension()` set on UIKitSettingsBuilder\n- `subscriptionType` always set\n\n## Autonomous Mode\n\n- If `pubspec.yaml` has `cometchat_chat_uikit` v5.x or `cometchat_calls_uikit` v5.x → proceed without asking\n- If credentials exist in code → reuse them\n- If user says \"messages screen\" → generate Scaffold + Header + List + Composer\n- Always add `subscriptionType` to UIKitSettingsBuilder\n- Always use `CometChatThemeHelper` for colors, never hardcode\n- Always import from `cometchat_chat_uikit` barrel for chat widgets. Add `cometchat_calls_uikit` as a SECOND import for calls — never as a replacement (the calls barrel does not re-export chat).\n\n## Android Build Requirements\n\n- `android.useAndroidX=true` and `android.enableJetifier=true` in `gradle.properties`\n- `minSdk 26` in `android/app/build.gradle`\n- ProGuard: `-keep class com.cometchat.** { *; }`","tags":["cometchat","flutter","skills","agent-skills","ai-agent","chat","claude-code","cursor","messaging","nextjs","react","react-native"],"capabilities":["skill","source-cometchat","skill-cometchat-flutter-v5","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","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 (6,020 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.873Z","embedding":null,"createdAt":"2026-05-07T13:05:10.447Z","updatedAt":"2026-05-18T19:04:50.873Z","lastSeenAt":"2026-05-18T19:04:50.873Z","tsv":"'26':665 '4.1.2':215 '5.0.0':218 '5.0.15':74 '5.2.14':70 'add':146,168,416,545,610,631 'also':142 'alway':162,536,573,609,614,621 'android':654 'android.enablejetifier':660 'android.useandroidx':657 'android/app/build.gradle':667 'apn':333 'app':134,173,405,423,436 'appid':434,484,485 'architectur':370 'ask':591 'aspect':186 'auth':344,446 'authkey':444,488,489 'autonom':575 'barrel':127,137,152,160,627,647 'base':49 'bloc':194,195 'bodi':527 'bool':468,471 'bubbl':317 'build':7,348,494,516,655 'buildcontext':517 'builder':399 'builder_protocol.dart':397 'bundl':87 'call':19,72,77,96,98,110,145,151,175,179,201,286,288,290,293,294,300,418,426,430,548,557,586,633,640,646 'callingextens':492 'callkit':338 'callnavigationcontext.navigatorkey':522,564 'center':528 'chat':8,15,68,90,92,118,132,136,159,166,199,205,254,404,414,540,543,581,625,629,653 'chat-on':131 'check':62 'child':529 'circularprogressind':530 'class':453,464,670 'code':596 'color':239,618 'com.cometchat':671 'cometchat':2,10,14,18,31,41,58,67,71,89,95,104,107,109,117,120,165,178,204,213,216,234,246,256,270,281,297,312,326,340,353,366,381,385,390,413,429,539,547,580,585,624,632 'cometchat-flutter-v5':1 'cometchat-flutter-v5-calls':296 'cometchat-flutter-v5-conversations':255 'cometchat-flutter-v5-core':233 'cometchat-flutter-v5-customization':325 'cometchat-flutter-v5-events':311 'cometchat-flutter-v5-messages':269 'cometchat-flutter-v5-production':352 'cometchat-flutter-v5-push':339 'cometchat-flutter-v5-theming':245 'cometchat-flutter-v5-troubleshooting':365 'cometchat-flutter-v5-users-groups':280 'cometchatcallbutton':291 'cometchatcallingextens':493,568 'cometchatchangescop':279 'cometchatcolorpalett':243 'cometchatsubscriptiontype.allusers':491 'cometchatthemehelp':616 'cometchatuikit.init':495 'cometchatuikit.loggedinuser':501 'cometchatuikit.login':558 'compact':264 'compon':94,100,380,382,386,391,396 'compos':263,265,608 'confirm':54 'const':432,438,442,451,457,525 'contact':278 'context':51,518 'control':207,378 'controller.dart':387 'convers':250,251,259 'core':237 'crash':361 'createst':462 'credenti':593 'custom':316,329 'dark':240 'dart':161,383,407 'datasourc':319 'debug':358 'debugprint':507 'decor':320 'depend':66 'detect':53 'differ':185 'direct':563 'e':506 'e.message':510 'entri':36 'environ':350 'equat':196 'error':357 'event':301,315 'everyth':88 'exist':594 'export':103,116,157,652 'extend':388,455,466 'extens':324 'fail':509 'fals':473,504,513 'fcm':332 'featur':28,47,78 'feature-specif':27 'final':481 'firebas':336 'fix':362 'flutter':3,11,32,235,247,257,271,282,298,313,327,341,354,367 'flutter/material.dart':410 'follow':375 'formatt':321 'generat':604 'get.put':208 'getbuild':192,232 'getx':191,231,377 'getxcontrol':193,389 'golden':401 'gradle.properties':663 'group':275,276,285 'hardcod':620 'header':266,606 'home':523 'homescreen':532 'id':437 'import':125,149,163,176,408,411,419,427,537,553,622,638 'incom':292 'indic':307 'init':226,508 'initcometchat':478,480 'initi':469,503,512,524 'initst':476 'intern':209 'keep':669 'key':181,447,534 'keyboard':267 'list':252,262,607 'listen':302 'log':295 'loggedin':472,500,531 'login':227 'loginscreen':533 'logout':228 'main':449 'manag':190 'materialapp':520,567 'member':277 'mention':222 'merg':244,395 'messag':260,261,273,337,602 'minim':403 'minsdk':664 'mode':241,576 'myapp':452,454,458 'myappstat':463,465 'navigatorkey':521 'need':143 'never':619,641 'notif':331 'null':502 'one':129 'onerror':505 'onlin':308 'onsuccess':498 'option':75 'orchestr':22,35 'overrid':460,474,514 'overview':371 'packag':44,83,164,177,197,409,412,428,538,546 'path':402 'pattern':211,379 'point':37,535 'proceed':589 'product':351,356 'proguard':346,668 'project':52,56 'protocol':400 'pubspec.yaml':63,578 'push':330,343 're':102,115,156,651 're-export':101,114,155,650 'real':304 'real-tim':303 'receipt':310 'recent':253 'region':440,486,487 'releas':347 'replac':644 'request':398 'requir':656 'return':519 'reus':597 'rout':25,45,220,223 'runapp':450 'say':601 'scaffold':526,605 'screen':603 'sdk':108,111,212,214,217 'second':148,552,637 'secur':349 'separ':82,198 'serviceloc':210 'set':482,497,565,569,574 'setstat':499,511 'setup':230 'share':106,122,123 'singl':203 'skill':23,30,38,48,219,225 'skill-cometchat-flutter-v5' 'slot':322 'source-cometchat' 'specif':29 'state':189,461,467 'statefulwidget':384,456 'status':309 'string':433,439,443,562 'style':242 'style.dart':392 'subscriptiontyp':490,572,611 'suffici':139 'super.initstate':477 'super.key':459 'take':560 'templat':318 'theme':238,249 'themeextens':393 'thread':268 'time':305 'token':335,345 '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' 'troubleshoot':363,369 'true':470,658,661 'two':126 'type':306 'ui':93,99 'uid':559 'uikit':12,16,20,33,42,59,69,73,91,97,105,119,121,200,202,206,373,582,587,626,634 'uikit/cometchat_calls_uikit.dart':180,431,549 'uikit/cometchat_chat_uikit.dart':167,415,541 'uikitset':229,496 'uikitsettingsbuild':483,571,613 'unlik':84 'us':441 'use':5,57,81,174,424,556,615 'user':221,274,284,600 'util':124 'v5':4,13,34,43,60,80,182,187,236,248,258,272,283,299,314,328,342,355,368,374,406 'v5.0.15':21 'v5.2.14':17 'v5.x':583,588 'v6':85,184,188 'verifi':364 'video':289 'view':323 'voic':287 'voice/video':144,425 'void':448,475,479 'voip':334 'vs':183 'widget':515,544,630 'without':590 'work':360 'yaml':65","prices":[{"id":"5b171688-0909-4a7e-965b-34598de8ce4c","listingId":"70f0ad30-c1eb-4f2e-b20a-5bbca65557f6","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:10.447Z"}],"sources":[{"listingId":"70f0ad30-c1eb-4f2e-b20a-5bbca65557f6","source":"github","sourceId":"cometchat/cometchat-skills/cometchat-flutter-v5","sourceUrl":"https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-flutter-v5","isPrimary":false,"firstSeenAt":"2026-05-07T13:05:10.447Z","lastSeenAt":"2026-05-18T19:04:50.873Z"}],"details":{"listingId":"70f0ad30-c1eb-4f2e-b20a-5bbca65557f6","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"cometchat","slug":"cometchat-flutter-v5","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":"ec7421338aa9d6a0e9fe3e73ae78b5286cbc3c6a","skill_md_path":"skills/cometchat-flutter-v5/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-flutter-v5"},"layout":"multi","source":"github","category":"cometchat-skills","frontmatter":{"name":"cometchat-flutter-v5","license":"MIT","description":"Use when building chat with CometChat Flutter UIKit v5 (cometchat_chat_uikit v5.2.14, cometchat_calls_uikit v5.0.15). Orchestrator skill that routes to feature-specific skills.","compatibility":"cometchat_chat_uikit ^5.2.14; cometchat_calls_uikit ^5.0.15; cometchat_uikit_shared ^5.2.3; cometchat_sdk ^4.1.2; get ^4.6.5"},"skills_sh_url":"https://skills.sh/cometchat/cometchat-skills/cometchat-flutter-v5"},"updatedAt":"2026-05-18T19:04:50.873Z"}}