{"id":"2d621c66-98b8-41cc-b3b9-4ca307246a97","shortId":"tLtGZe","kind":"skill","title":"cometchat-flutter-v6-migration","tagline":"Use when migrating a CometChat Flutter app from UIKit v5 (cometchat_calls_uikit + GetX) to UIKit v6 (cometchat_chat_uikit unified package, no GetX). Covers import changes, dependency cleanup, GetX removal, init/login pattern changes, navigation rewrites, screen structure flatteni","description":"# CometChat Flutter — v5 to v6 Migration\n\nComplete guide for migrating a consumer app from UIKit v5 to v6.\n\n## What Changed\n\n| Area | v5 | v6 |\n|------|-----|-----|\n| Packages | `cometchat_chat_uikit` + `cometchat_calls_uikit` (separate) | `cometchat_chat_uikit` only (calls bundled) |\n| State | GetX (`Get.put`, `GetBuilder`, `Obx`, `.obs`, `RxBool`) | Plain `StatefulWidget` + `setState()` |\n| Navigation | `PageManager` (GetxController singleton) | Direct `Navigator.push` |\n| Init | `InitializeCometChat.init()` + `CometChatCallingExtension()` + `extensions` + `aiFeature` | Inline `CometChatUIKit.init()` + `enableCalls: true` + `CallingConfiguration()` |\n| Calls SDK init | `CometChatCallingExtension()` in extensions list | `CallEventService.instance.init()` after login |\n| Screens | Separate controller + widget files per screen | Single file, state in StatefulWidget |\n| Dashboard | `MyHomePage`/`MyPageView` with GetX `PageManager` | `HomeScreen` with `IndexedStack` |\n| Messages | `MessagesSample` + `CometChatMessagesController` | `MessagesScreen` with listener mixins |\n| Builder system | `BuilderSettings`, `BuilderColor`, `BuilderTypography` | Removed — toggle features per-widget (e.g. `disableReactions`, `hideReplyInThreadOption` on `CometChatMessageList`) or via the relevant component's constructor params. There is no global `ComponentToggles` class. |\n| Notifications | `VoipNotificationHandler`, `APNSService` | `VoipCallHandler`, `ApnsService` |\n| Extra deps | `get`, `google_sign_in`, `firebase_auth`, `bugsee_flutter`, `shared_preferences`, `toast`, `mobile_scanner`, `app_badge_plus` | None of these |\n| Localization | `cc.Translations.delegate` + `GlobalMaterialLocalizations` in MaterialApp | Handled by UIKit internally |\n| Call screen | `callMain()` entry point + `CallApp` + `CallScreen` widget | `CometChatOngoingCall` widget for the in-call UI + `CometChatDisplayIncomingCallOverlay` for incoming-call presentation. No separate Dart entry point. |\n| Android minSdk | 24 | 26 (required by `cometchat_calls_sdk`) |\n\n## Step 1: pubspec.yaml\n\n```yaml\n# ❌ v5\ndependencies:\n  cometchat_chat_uikit:\n    path: ../chat_uikit\n  cometchat_calls_uikit:\n    path: ../calls_uikit\n  get: ^4.6.5\n  google_sign_in: ^6.2.2\n  firebase_auth: ^5.3.4\n  bugsee_flutter: ^8.0.0\n  permission_handler: ^11.3.1\n  shared_preferences: ^2.2.1\n  toast: ^0.3.0\n  mobile_scanner: ^7.1.2\n  app_badge_plus: ^1.2.6\n\n# ✅ v6\ndependencies:\n  cometchat_chat_uikit:\n    hosted: https://dart.cloudsmith.io/cometchat/cometchat/\n    version: 6.0.0-beta2\n  firebase_core: ^3.9.0\n  firebase_crashlytics: ^4.1.3\n  firebase_messaging: ^15.1.6\n  flutter_local_notifications: ^18.0.0\n  flutter_callkit_incoming: ^2.5.0\n  http: ^1.2.0\n  intl: ^0.20.2\n```\n\n## Step 2: Fix All Imports\n\n| v5 Import | v6 Import |\n|-----------|-----------|\n| `package:cometchat_calls_uikit/cometchat_calls_uikit.dart` | `package:cometchat_chat_uikit/cometchat_calls_uikit.dart` |\n| `package:get/get.dart` | Remove entirely |\n| `builder/builder_settings.dart` | Remove — toggle features per-widget instead (no global toggle class in v6) |\n| `builder/builder_settings_helper.dart` | Remove |\n| `utils/page_manager.dart` | Remove — use `Navigator.push` |\n| `utils/initialize_cometchat.dart` | Remove — inline init |\n| `utils/bool_singleton.dart` | Remove |\n| `utils/text_constants.dart` | Remove |\n| `prefs/shared_preferences.dart` | Remove |\n\n## Step 3: Rewrite Init\n\n```dart\n// ❌ v5 — helper class with CometChatCallingExtension + extensions + aiFeature\nclass InitializeCometChat {\n  static Future<bool> init() async {\n    final builder = UIKitSettingsBuilder()\n      ..callingExtension = CometChatCallingExtension()  // REMOVED in v6\n      ..extensions = CometChatUIKitChatExtensions.getDefaultExtensions()  // REMOVED\n      ..aiFeature = CometChatUIKitChatAIFeatures.getDefaultAiFeatures();  // REMOVED\n    // ...\n  }\n}\n\n// ✅ v6 — inline, enableCalls + CallingConfiguration replace all three\nfinal settings = (UIKitSettingsBuilder()\n      ..subscriptionType = CometChatSubscriptionType.allUsers\n      ..region = AppCredentials.region\n      ..appId = AppCredentials.appId\n      ..authKey = AppCredentials.authKey\n      ..enableCalls = true\n      ..callingConfiguration = CallingConfiguration())\n    .build();\n\nCometChatUIKit.init(uiKitSettings: settings, onSuccess: (_) { ... });\n```\n\n### Removed v5 UIKitSettingsBuilder properties\n- `callingExtension` → replaced by `enableCalls: true`\n- `extensions` → removed (extensions auto-registered in v6)\n- `aiFeature` → removed (AI features auto-registered in v6)\n\n### Calls SDK Init for Cached Sessions\n\n```dart\n// ❌ v5 — CometChatCallingExtension handled it automatically\n\n// ✅ v6 — explicit init needed when restoring cached session (no login call)\nFuture<void> _initCallsSdk() async {\n  await CallEventService.instance.init(\n    configuration: CallingConfiguration(),\n  );\n}\n// Call after checking getLoggedInUser() returns non-null\n```\n\n## Step 4: Remove GetX\n\n### PageManager → Navigator.push\n```dart\n// ❌ v5\nGet.put(PageManager());\nGet.find<PageManager>().navigateToMessages(context: context, user: user);\n\n// ✅ v6\nNavigator.push(context, MaterialPageRoute(\n  builder: (_) => MessagesScreen(user: user),\n));\n```\n\n### GetBuilder → StatefulWidget with listener mixins\n```dart\n// ❌ v5\nGetBuilder<CometChatMessagesController>(\n  init: messagesController,\n  tag: messagesController.tag,\n  builder: (controller) => Scaffold(/* ... */),\n)\n\n// ✅ v6\nclass _MessagesScreenState extends State<MessagesScreen>\n    with UserListener, CometChatUserEventListener,\n         GroupListener, CometChatGroupEventListener {\n  late User? _user;\n  late Group? _group;\n  // setState() instead of controller.update()\n}\n```\n\n### Rx variables → plain state\n```dart\n// ❌ v5\nvar isBlockLoading = false.obs;\n// Usage: isBlockLoading.value = true;\n\n// ✅ v6\nbool _isUserBlocked = false;\n// Usage: setState(() => _isUserBlocked = true);\n```\n\n### Obx dialogs → StatefulBuilder\n```dart\n// ❌ v5 — Obx in dialog for loading indicator\nObx(() => isLoading.value ? CircularProgressIndicator() : Icon(Icons.check))\n\n// ✅ v6 — StatefulBuilder in dialog\nStatefulBuilder(builder: (context, setDialogState) {\n  return isLoading ? CircularProgressIndicator() : Icon(Icons.check);\n})\n```\n\n## Step 5: Removed v5 APIs\n\nThese v5 widget parameters/classes don't exist in v6:\n\n| v5 API | Status in v6 |\n|--------|-------------|\n| `CometChatCompactMessageComposer` | Removed — use `CometChatMessageComposer` |\n| `CometChatAIAssistantChatHistory` | Removed |\n| `CometChatMessageHeader` `options` param | Removed — use `trailingView` |\n| `CometChatMessageList` `messageId` param | Removed — use `goToMessageId` |\n| `CometChatMessageList` `hideFlagOption` | Removed |\n| `CometChatMessageList` `generateConversationSummary` | Removed |\n| `getDataSource()` on message list | Removed |\n| `AssetConstants.conversationSummaryOutlined` | Removed |\n| `CometChatBannedMembers` (standalone widget) | Not exported in v6 |\n| `CometChatCallLogParticipants` (standalone) | Not exported in v6 |\n| `CometChatCallLogRecordings` (standalone) | Not exported in v6 |\n| `CometChatCallLogHistory` (standalone) | Not exported in v6 |\n| `CometChatCallingExtension()` | Replaced by `enableCalls: true` + `CallingConfiguration()` |\n| `CometChatUIKitChatExtensions.getDefaultExtensions()` | Removed — auto-registered |\n| `CometChatUIKitChatAIFeatures.getDefaultAiFeatures()` | Removed — auto-registered |\n| `CallSettingsBuilder` | Replaced by `SessionSettingsBuilder` |\n| `FormatPatterns.stripFormatting()` | Removed |\n| `CallStateController.instance` | Replaced by `CallStateService.instance` |\n\n### CallSettingsBuilder → SessionSettingsBuilder\n```dart\n// ❌ v5\nCallSettingsBuilder()\n  ..enableDefaultLayout = true\n\n// ✅ v6\nSessionSettingsBuilder()\n  ..setLayout(LayoutType.tile)\n  ..startVideoPaused(true)  // for audio calls\n  ..hideSwitchCameraButton(true)\n  ..hideToggleVideoButton(true)\n```\n\n## Step 6: Flatten Screen Structure\n\n```\n# ❌ v5 — controller + widget per screen\nmessages/\n├── messages.dart                    # MessagesSample widget\n└── messages_controller.dart         # GetxController\ngroup_info/\n├── cometchat_group_info.dart\n└── cometchat_group_info_controller.dart\n\n# ✅ v6 — single file per screen\nscreens/\n├── messages_screen.dart             # Widget + state + listeners\n├── group_info_screen.dart\n├── home_screen.dart\n└── ...\n```\n\n### Class Rename Map\n\n| v5 Class | v6 Class |\n|----------|----------|\n| `MyHomePage` / `MyPageView` | `HomeScreen` |\n| `MessagesSample` | `MessagesScreen` |\n| `GuardScreen` | `GuardScreen` (same name, rewritten) |\n| `LoginSampleUsers` | `LoginScreen` |\n\n## Step 7: Update MaterialApp\n\n```dart\n// ❌ v5 — localization delegates, BuilderTypography, callMain entry point\nMaterialApp(\n  supportedLocales: const [Locale('en'), Locale('ar'), ...],\n  localizationsDelegates: const [\n    cc.Translations.delegate,\n    GlobalMaterialLocalizations.delegate,\n    GlobalWidgetsLocalizations.delegate,\n    GlobalCupertinoLocalizations.delegate,\n  ],\n  theme: ThemeData(\n    fontFamily: BuilderTypography.font,\n    extensions: [CometChatColorPalette(primary: BuilderColor.brandColor)],\n  ),\n  navigatorKey: CallNavigationContext.navigatorKey,\n)\n\n// ✅ v6 — Material 3, no builder system, no localization delegates\nMaterialApp(\n  debugShowCheckedModeBanner: false,\n  navigatorKey: LocalNotificationService.navigatorKey,\n  theme: ThemeData(\n    colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),\n    useMaterial3: true,\n  ),\n  darkTheme: ThemeData(\n    colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple, brightness: Brightness.dark),\n    useMaterial3: true,\n    brightness: Brightness.dark,\n  ),\n  themeMode: ThemeMode.system,\n)\n```\n\nRemove the `callMain()` entry point and `CallApp`/`CallScreen` widget entirely. V6 renders the in-call UI via the `CometChatOngoingCall` widget (placed in your widget tree once the call is active) and presents incoming calls via `CometChatDisplayIncomingCallOverlay`. There is no `CallScreenOverlay.show()` API.\n\n## Step 8: Update Notification Services\n\n| v5 Class | v6 Class |\n|----------|----------|\n| `VoipNotificationHandler` | `VoipCallHandler` |\n| `APNSService` | `ApnsService` |\n| `FirebaseService` | `FirebaseService` (same) |\n\n### VoIP Cold Start\n```dart\n// ❌ v5 — handled in dashboard initState\nVoipNotificationHandler.handleNativeCallIntent(context);\n\n// ✅ v6 — init early in main(), markSdkReady after login\nVoipCallHandler.instance.init();  // in main()\nawait VoipCallHandler.instance.markSdkReady();  // after login\n```\n\n## Step 9: resizeToAvoidBottomInset\n\n```dart\n// ❌ v5 — default true, SafeArea wrapping\nScaffold(body: SafeArea(child: Column(children: [messageList, composer])))\n\n// ✅ v6 — must be false, composer handles keyboard internally\nScaffold(\n  resizeToAvoidBottomInset: false,\n  body: Column(children: [Expanded(child: messageList), composer]),\n)\n```\n\n## Step 10: Android Build\n\nIn `android/app/build.gradle(.kts)`:\n```kotlin\ndefaultConfig {\n    minSdk = 26  // Was 24 in v5, required by cometchat_calls_sdk in v6\n}\n```\n\nIn `android/gradle.properties`:\n```properties\nandroid.enableJetifier=true  // Required for support library conflicts\n```\n\n## Step 11: Delete v5 Files\n\n- `builder/` folder entirely\n- `utils/page_manager.dart`, `initialize_cometchat.dart`, `bool_singleton.dart`, `text_constants.dart`\n- `prefs/shared_preferences.dart`\n- `services/bugsee_services.dart`\n- `qr_scanner/` folder\n- `ai_agents/` folder\n- `call_screen.dart`\n- `demo_meta_info_constants.dart` (recreate minimal if needed)\n- All `*_controller.dart` files\n- `auth/login_screen.dart` (if it depended on google_sign_in/firebase_auth)\n\n## Gotchas\n\n- `CometChatCallingExtension()`, `extensions`, and `aiFeature` on UIKitSettingsBuilder don't exist in v6. Extensions and AI features are auto-registered. Only `enableCalls: true` + `CallingConfiguration()` is needed.\n- `CallSettingsBuilder` is renamed to `SessionSettingsBuilder` with different API: `.setLayout(LayoutType.tile)` instead of `..enableDefaultLayout = true`.\n- v6 `CometChatMessageList` doesn't have `messageId` param — use `goToMessageId` instead.\n- `CometChatBannedMembers`, `CometChatCallLogParticipants`, `CometChatCallLogRecordings`, `CometChatCallLogHistory` are not exported as standalone widgets in v6.\n- The `callMain()` entry point pattern (separate Dart entry point for Android CallActivity) is gone. V6 renders the in-call UI via the `CometChatOngoingCall` widget within your existing app navigator + `CometChatDisplayIncomingCallOverlay` for incoming-call UI.\n- `FormatPatterns.stripFormatting()` doesn't exist in v6. Use `MarkdownTextFormatter` instead.\n\n## Checklist\n\n- [ ] `pubspec.yaml` — remove `cometchat_calls_uikit`, `get`, and all unused deps\n- [ ] All imports — `cometchat_calls_uikit` → `cometchat_chat_uikit/cometchat_calls_uikit.dart`\n- [ ] All imports — remove `get/get.dart`\n- [ ] Init — remove `CometChatCallingExtension`, `extensions`, `aiFeature`; add `enableCalls` + `CallingConfiguration`\n- [ ] Add `CallEventService.instance.init()` for cached sessions\n- [ ] Remove `PageManager` — replace with `Navigator.push`\n- [ ] Remove all `GetBuilder`/`Obx`/`Get.put`/`Get.find`\n- [ ] Remove all `*_controller.dart` files\n- [ ] Flatten screens into `screens/` folder\n- [ ] Remove `BuilderSettings` — toggle features per-widget (e.g. `disableReactions`, `hideReplyInThreadOption`) on the relevant CometChat widget instead\n- [ ] Update `MaterialApp` — remove localization delegates, remove `BuilderTypography`\n- [ ] Remove `callMain()` entry point and `CallScreen` widget\n- [ ] `CallSettingsBuilder` → `SessionSettingsBuilder`\n- [ ] `resizeToAvoidBottomInset: false` on all Scaffolds with composer\n- [ ] Android `minSdk` = 26\n- [ ] Android `enableJetifier = true`\n- [ ] Delete all unused v5 files\n- [ ] Test: init → login → conversations → messages → calls → logout → re-login","tags":["cometchat","flutter","migration","skills","agent-skills","ai-agent","chat","claude-code","cursor","messaging","nextjs","react"],"capabilities":["skill","source-cometchat","skill-cometchat-flutter-v6-migration","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-v6-migration","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 (13,891 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:51.788Z","embedding":null,"createdAt":"2026-05-07T13:05:11.683Z","updatedAt":"2026-05-18T19:04:51.788Z","lastSeenAt":"2026-05-18T19:04:51.788Z","tsv":"'/calls_uikit':262 '/chat_uikit':257 '/cometchat/cometchat/':298 '0.20.2':322 '0.3.0':282 '1':248 '1.2.0':320 '1.2.6':289 '10':968 '11':1000 '11.3.1':277 '15.1.6':310 '18.0.0':314 '2':324 '2.2.1':280 '2.5.0':318 '24':240,979 '26':241,977,1240 '3':375,814 '3.9.0':304 '4':498 '4.1.3':307 '4.6.5':264 '5':606 '5.3.4':271 '6':727 '6.0.0':300 '6.2.2':268 '7':778 '7.1.2':285 '8':891 '8.0.0':274 '9':933 'activ':878 'add':1171,1174 'agent':1017 'ai':452,1016,1050 'aifeatur':102,385,403,450,1040,1170 'android':238,969,1108,1238,1241 'android.enablejetifier':992 'android/app/build.gradle':972 'android/gradle.properties':990 'api':609,620,889,1069 'apnsservic':178,180,901,902 'app':12,57,196,286,1126 'appcredentials.appid':421 'appcredentials.authkey':423 'appcredentials.region':419 'appid':420 'ar':795 'area':65 'assetconstants.conversationsummaryoutlined':653 'async':391,484 'audio':720 'auth':188,270 'auth/login_screen.dart':1028 'authkey':422 'auto':446,455,689,694,1054 'auto-regist':445,454,688,693,1053 'automat':470 'await':485,928 'badg':197,287 'beta2':301 'bodi':942,960 'bool':569 'bool_singleton.dart':1009 'bright':840,844 'brightness.dark':841,845 'bugse':189,272 'build':428,970 'builder':146,393,517,533,597,816,1004 'builder/builder_settings.dart':344 'builder/builder_settings_helper.dart':358 'buildercolor':149 'buildercolor.brandcolor':809 'builderset':148,1200 'buildertypographi':150,785,1221 'buildertypography.font':805 'bundl':81 'cach':463,477,1177 'call':17,73,80,108,211,225,231,245,259,334,459,481,489,721,863,876,882,985,1117,1132,1147,1157,1254 'call_screen.dart':1019 'callact':1109 'callapp':216,854 'calleventservice.instance.init':115,486,1175 'callingconfigur':107,409,426,427,488,685,1059,1173 'callingextens':395,437 'callkit':316 'callmain':213,786,850,1099,1223 'callnavigationcontext.navigatorkey':811 'callscreen':217,855,1227 'callscreenoverlay.show':888 'callsettingsbuild':696,706,710,1062,1229 'callstatecontroller.instance':702 'callstateservice.instance':705 'cc.translations.delegate':203,798 'chang':32,39,64 'chat':24,70,77,254,293,338,1160 'check':491 'checklist':1143 'child':944,964 'children':946,962 'circularprogressind':589,602 'class':175,355,381,386,537,758,762,764,896,898 'cleanup':34 'cold':907 'colors.deeppurple':831,839 'colorschem':828,836 'colorscheme.fromseed':829,837 'column':945,961 'cometchat':2,10,16,23,45,69,72,76,244,253,258,292,333,337,984,1146,1156,1159,1212 'cometchat-flutter-v6-migration':1 'cometchat_group_info.dart':744 'cometchat_group_info_controller.dart':745 'cometchataiassistantchathistori':628 'cometchatbannedmemb':655,1086 'cometchatcallingextens':100,111,383,396,467,680,1037,1168 'cometchatcallloghistori':674,1089 'cometchatcalllogparticip':662,1087 'cometchatcalllogrecord':668,1088 'cometchatcolorpalett':807 'cometchatcompactmessagecompos':624 'cometchatdisplayincomingcalloverlay':227,884,1128 'cometchatgroupeventlisten':545 'cometchatmessagecompos':627 'cometchatmessagehead':630 'cometchatmessagelist':161,636,642,645,1077 'cometchatmessagescontrol':141 'cometchatongoingcal':219,867,1121 'cometchatsubscriptiontype.allusers':417 'cometchatuikit.init':104,429 'cometchatuikitchataifeatures.getdefaultaifeatures':404,691 'cometchatuikitchatextensions.getdefaultextensions':401,686 'cometchatusereventlisten':543 'complet':51 'compon':166 'componenttoggl':174 'compos':948,953,966,1237 'configur':487 'conflict':998 'const':791,797 'constructor':168 'consum':56 'context':509,510,515,598,916 'control':120,534,732 'controller.dart':1026,1192 'controller.update':555 'convers':1252 'core':303 'cover':30 'crashlyt':306 'darkthem':834 'dart':235,378,465,503,526,560,579,708,781,909,935,1104 'dart.cloudsmith.io':297 'dart.cloudsmith.io/cometchat/cometchat/':296 'dashboard':130,913 'debugshowcheckedmodebann':822 'default':937 'defaultconfig':975 'deleg':784,820,1219 'delet':1001,1244 'demo_meta_info_constants.dart':1020 'dep':182,1153 'depend':33,252,291,1031 'dialog':577,583,595 'differ':1068 'direct':96 'disablereact':158,1207 'doesn':1078,1135 'e.g':157,1206 'earli':919 'en':793 'enablecal':105,408,424,440,683,1057,1172 'enabledefaultlayout':711,1074 'enablejetifi':1242 'entir':343,857,1006 'entri':214,236,787,851,1100,1105,1224 'exist':616,1045,1125,1137 'expand':963 'explicit':472 'export':659,665,671,677,1092 'extend':539 'extens':101,113,384,400,442,444,806,1038,1048,1169 'extra':181 'fals':571,823,952,959,1232 'false.obs':564 'featur':153,347,453,1051,1202 'file':122,126,748,1003,1027,1193,1248 'final':392,413 'firebas':187,269,302,305,308 'firebaseservic':903,904 'fix':325 'flatten':728,1194 'flatteni':44 'flutter':3,11,46,190,273,311,315 'folder':1005,1015,1018,1198 'fontfamili':804 'formatpatterns.stripformatting':700,1134 'futur':389,482 'generateconversationsummari':646 'get':183,263,1149 'get.find':507,1189 'get.put':84,505,1188 'get/get.dart':341,1165 'getbuild':85,521,528,1186 'getdatasourc':648 'getloggedinus':492 'getx':19,29,35,83,134,500 'getxcontrol':94,741 'global':173,353 'globalcupertinolocalizations.delegate':801 'globalmaterialloc':204 'globalmateriallocalizations.delegate':799 'globalwidgetslocalizations.delegate':800 'gone':1111 'googl':184,265,1033 'gotcha':1036 'gotomessageid':641,1084 'group':550,551,742 'group_info_screen.dart':756 'grouplisten':544 'guardscreen':770,771 'guid':52 'handl':207,468,911,954 'handler':276 'helper':380 'hideflagopt':643 'hidereplyinthreadopt':159,1208 'hideswitchcamerabutton':722 'hidetogglevideobutton':724 'home_screen.dart':757 'homescreen':136,767 'host':295 'http':319 'icon':590,603 'icons.check':591,604 'import':31,327,329,331,1155,1163 'in-cal':223,861,1115 'in/firebase_auth':1035 'incom':230,317,881,1131 'incoming-cal':229,1130 'indexedstack':138 'indic':586 'info':743 'init':98,110,367,377,390,461,473,529,918,1166,1250 'init/login':37 'initcallssdk':483 'initialize_cometchat.dart':1008 'initializecometchat':387 'initializecometchat.init':99 'initst':914 'inlin':103,366,407 'instead':351,553,1072,1085,1142,1214 'intern':210,956 'intl':321 'isblockload':563 'isblockloading.value':566 'isload':601 'isloading.value':588 'isuserblock':570,574 'keyboard':955 'kotlin':974 'kts':973 'late':546,549 'layouttype.tile':716,1071 'librari':997 'list':114,651 'listen':144,524,755 'load':585 'local':202,312,783,792,794,819,1218 'localizationsdeleg':796 'localnotificationservice.navigatorkey':825 'login':117,480,924,931,1251,1258 'loginsampleus':775 'loginscreen':776 'logout':1255 'main':921,927 'map':760 'markdowntextformatt':1141 'marksdkreadi':922 'materi':813 'materialapp':206,780,789,821,1216 'materialpagerout':516 'messag':139,309,650,736,1253 'messageid':637,1081 'messagelist':947,965 'messages.dart':737 'messages_controller.dart':740 'messages_screen.dart':752 'messagescontrol':530 'messagescontroller.tag':532 'messagessampl':140,738,768 'messagesscreen':142,518,769 'messagesscreenst':538 'migrat':5,8,50,54 'minim':1022 'minsdk':239,976,1239 'mixin':145,525 'mobil':194,283 'must':950 'myhomepag':131,765 'mypageview':132,766 'name':773 'navig':40,92,1127 'navigatetomessag':508 'navigator.push':97,363,502,514,1183 'navigatorkey':810,824 'need':474,1024,1061 'non':495 'non-nul':494 'none':199 'notif':176,313,893 'null':496 'ob':87 'obx':86,576,581,587,1187 'onsuccess':432 'option':631 'packag':27,68,332,336,340 'pagemanag':93,135,501,506,1180 'param':169,632,638,1082 'parameters/classes':613 'path':256,261 'pattern':38,1102 'per':123,155,349,734,749,1204 'per-widget':154,348,1203 'permiss':275 'place':869 'plain':89,558 'plus':198,288 'point':215,237,788,852,1101,1106,1225 'prefer':192,279 'prefs/shared_preferences.dart':372,1011 'present':232,880 'primari':808 'properti':436,991 'pubspec.yaml':249,1144 'qr':1013 're':1257 're-login':1256 'recreat':1021 'region':418 'regist':447,456,690,695,1055 'relev':165,1211 'remov':36,151,342,345,359,361,365,369,371,373,397,402,405,433,443,451,499,607,625,629,633,639,644,647,652,654,687,692,701,848,1145,1164,1167,1179,1184,1190,1199,1217,1220,1222 'renam':759,1064 'render':859,1113 'replac':410,438,681,697,703,1181 'requir':242,982,994 'resizetoavoidbottominset':934,958,1231 'restor':476 'return':493,600 'rewrit':41,376 'rewritten':774 'rx':556 'rxbool':88 'safearea':939,943 'scaffold':535,941,957,1235 'scanner':195,284,1014 'screen':42,118,124,212,729,735,750,751,1195,1197 'sdk':109,246,460,986 'seedcolor':830,838 'separ':75,119,234,1103 'servic':894 'services/bugsee_services.dart':1012 'session':464,478,1178 'sessionsettingsbuild':699,707,714,1066,1230 'set':414,431 'setdialogst':599 'setlayout':715,1070 'setstat':91,552,573 'share':191,278 'sign':185,266,1034 'singl':125,747 'singleton':95 'skill' 'skill-cometchat-flutter-v6-migration' 'source-cometchat' 'standalon':656,663,669,675,1094 'start':908 'startvideopaus':717 'state':82,127,540,559,754 'statefulbuild':578,593,596 'statefulwidget':90,129,522 'static':388 'status':621 'step':247,323,374,497,605,726,777,890,932,967,999 'structur':43,730 'subscriptiontyp':416 'support':996 'supportedlocal':790 'system':147,817 'tag':531 'test':1249 'text_constants.dart':1010 'theme':802,826 'themedata':803,827,835 'thememod':846 'thememode.system':847 'three':412 'toast':193,281 'toggl':152,346,354,1201 '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' 'trailingview':635 'tree':873 'true':106,425,441,567,575,684,712,718,723,725,833,843,938,993,1058,1075,1243 'ui':226,864,1118,1133 'uikit':14,18,21,25,59,71,74,78,209,255,260,294,1148,1158 'uikit/cometchat_calls_uikit.dart':335,339,1161 'uikitset':430 'uikitsettingsbuild':394,415,435,1042 'unifi':26 'unus':1152,1246 'updat':779,892,1215 'usag':565,572 'use':6,362,626,634,640,1083,1140 'usematerial3':832,842 'user':511,512,519,520,547,548 'userlisten':542 'utils/bool_singleton.dart':368 'utils/initialize_cometchat.dart':364 'utils/page_manager.dart':360,1007 'utils/text_constants.dart':370 'v5':15,47,60,66,251,328,379,434,466,504,527,561,580,608,611,619,709,731,761,782,895,910,936,981,1002,1247 'v6':4,22,49,62,67,290,330,357,399,406,449,458,471,513,536,568,592,618,623,661,667,673,679,713,746,763,812,858,897,917,949,988,1047,1076,1097,1112,1139 'var':562 'variabl':557 'version':299 'via':163,865,883,1119 'voip':906 'voipcallhandl':179,900 'voipcallhandler.instance.init':925 'voipcallhandler.instance.marksdkready':929 'voipnotificationhandl':177,899 'voipnotificationhandler.handlenativecallintent':915 'widget':121,156,218,220,350,612,657,733,739,753,856,868,872,1095,1122,1205,1213,1228 'within':1123 'wrap':940 'yaml':250","prices":[{"id":"0b0e854a-f6ab-417c-b64a-aab1608b27cd","listingId":"2d621c66-98b8-41cc-b3b9-4ca307246a97","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:11.683Z"}],"sources":[{"listingId":"2d621c66-98b8-41cc-b3b9-4ca307246a97","source":"github","sourceId":"cometchat/cometchat-skills/cometchat-flutter-v6-migration","sourceUrl":"https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-flutter-v6-migration","isPrimary":false,"firstSeenAt":"2026-05-07T13:05:11.683Z","lastSeenAt":"2026-05-18T19:04:51.788Z"}],"details":{"listingId":"2d621c66-98b8-41cc-b3b9-4ca307246a97","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"cometchat","slug":"cometchat-flutter-v6-migration","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":"665faeebb24433e23299bc78a5e28533c398fedc","skill_md_path":"skills/cometchat-flutter-v6-migration/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-flutter-v6-migration"},"layout":"multi","source":"github","category":"cometchat-skills","frontmatter":{"name":"cometchat-flutter-v6-migration","license":"MIT","description":"Use when migrating a CometChat Flutter app from UIKit v5 (cometchat_calls_uikit + GetX) to UIKit v6 (cometchat_chat_uikit unified package, no GetX). Covers import changes, dependency cleanup, GetX removal, init/login pattern changes, navigation rewrites, screen structure flattening, notification service updates, and BuilderSettings removal. Also use when seeing imports from cometchat_calls_uikit, get/get.dart, or v5-era patterns like GetBuilder, Get.put, Get.find, PageManager, BuilderSettings, or CometChatCallingExtension.","compatibility":"cometchat_chat_uikit 6.0.0-beta2"},"skills_sh_url":"https://skills.sh/cometchat/cometchat-skills/cometchat-flutter-v6-migration"},"updatedAt":"2026-05-18T19:04:51.788Z"}}