@cometchat/skills 4.4.2 → 5.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +55 -0
- package/.claude-plugin/plugin.json +14 -0
- package/CHANGELOG.md +44 -0
- package/LICENSE +21 -0
- package/MIGRATING.md +187 -0
- package/README.md +52 -156
- package/RULES.md +125 -0
- package/bin/cometchat-skills.mjs +1280 -0
- package/bin/legacy-skills.json +95 -0
- package/catalogs/android-v6.json +1646 -0
- package/catalogs/flutter-v6.json +651 -0
- package/catalogs/ios-v5.json +1383 -0
- package/catalogs/rn-calls-v5.json +134 -0
- package/catalogs/rn-calls-v5.symbols.txt +58 -0
- package/catalogs/rn-sdk-v4.json +672 -0
- package/catalogs/rn-v5.json +449 -0
- package/catalogs/rn-v5.symbols.txt +216 -0
- package/catalogs/sdk-android-v5.json +514 -0
- package/contracts.android-calls-v5.json +122 -0
- package/contracts.android-v6.json +135 -0
- package/contracts.angular-v5.json +694 -0
- package/contracts.flutter-calls-v5.json +77 -0
- package/contracts.flutter-v6.json +126 -0
- package/contracts.ios-calls-v5.json +67 -0
- package/contracts.ios-v5.json +436 -0
- package/contracts.json +82 -0
- package/contracts.rn-calls-v5.json +77 -0
- package/contracts.rn-v5.json +727 -0
- package/contracts.sdk-android-v5.json +15 -0
- package/contracts.web-calls-v5.json +45 -0
- package/features.android-calls-v5.json +246 -0
- package/features.android-v6.json +65 -0
- package/features.angular-v5.json +521 -0
- package/features.flutter-calls-v5.json +286 -0
- package/features.flutter-v6.json +484 -0
- package/features.ios-calls-v5.json +236 -0
- package/features.ios-v5.json +573 -0
- package/features.json +61 -0
- package/features.rn-calls-v5.json +187 -0
- package/features.rn-v5.json +614 -0
- package/features.sdk-android-v5.json +40 -0
- package/features.sdk-jsv4.json +24 -0
- package/features.web-calls-v5.json +108 -0
- package/package.json +156 -74
- package/peers.yaml +355 -0
- package/registry/README.md +31 -0
- package/registry/android-calls-v5.json +94 -0
- package/registry/android-v6.json +177 -0
- package/registry/angular-v5.json +154 -0
- package/registry/flutter-calls-v5.json +94 -0
- package/registry/flutter-v6.json +159 -0
- package/registry/ios-calls-v5.json +99 -0
- package/registry/ios-v5.json +152 -0
- package/registry/rn-calls-v5.json +99 -0
- package/registry/rn-v5.json +169 -0
- package/registry/sdk-android-v5.json +93 -0
- package/registry/sdk-jsv4.json +93 -0
- package/registry/web-calls-v5.json +94 -0
- package/registry/web-v7.json +154 -0
- package/skills/cometchat/SKILL.md +47 -2096
- package/skills/cometchat-a11y/SKILL.md +44 -472
- package/skills/cometchat-analytics/SKILL.md +61 -0
- package/skills/cometchat-android-v5-calls-sdk/SKILL.md +206 -0
- package/skills/cometchat-android-v5-calls-sdk/references/build-truth.md +63 -0
- package/skills/cometchat-android-v5-calls-sdk/references/docs-map.md +119 -0
- package/skills/cometchat-android-v5-calls-sdk/references/method-map.md +53 -0
- package/skills/cometchat-android-v5-calls-sdk/references/pitfalls.md +72 -0
- package/skills/cometchat-android-v5-calls-sdk/references/ringing.md +92 -0
- package/skills/cometchat-android-v5-calls-sdk/references/user-switch.md +90 -0
- package/skills/cometchat-android-v5-sdk/SKILL.md +127 -0
- package/skills/cometchat-android-v5-sdk/references/app-surface.md +88 -0
- package/skills/cometchat-android-v5-sdk/references/docs-map.md +91 -0
- package/skills/cometchat-android-v6-builder-settings/SKILL.md +51 -137
- package/skills/cometchat-android-v6-calls/SKILL.md +128 -413
- package/skills/cometchat-android-v6-compose-components/SKILL.md +84 -194
- package/skills/cometchat-android-v6-compose-customization/SKILL.md +66 -411
- package/skills/cometchat-android-v6-compose-placement/SKILL.md +154 -237
- package/skills/cometchat-android-v6-core/SKILL.md +236 -672
- package/skills/cometchat-android-v6-core/references/anti-patterns.md +31 -0
- package/skills/cometchat-android-v6-core/references/component-props.md +168 -0
- package/skills/cometchat-android-v6-core/references/docs-map.md +153 -0
- package/skills/cometchat-android-v6-core/references/layout.md +112 -0
- package/skills/cometchat-android-v6-core/references/lifecycle.md +75 -0
- package/skills/cometchat-android-v6-core/references/setup-credentials.md +105 -0
- package/skills/cometchat-android-v6-core/references/troubleshooting.md +36 -0
- package/skills/cometchat-android-v6-events/SKILL.md +46 -184
- package/skills/cometchat-android-v6-extensions/SKILL.md +39 -179
- package/skills/cometchat-android-v6-features/SKILL.md +74 -143
- package/skills/cometchat-android-v6-kotlin-components/SKILL.md +75 -193
- package/skills/cometchat-android-v6-kotlin-customization/SKILL.md +67 -419
- package/skills/cometchat-android-v6-kotlin-placement/SKILL.md +77 -223
- package/skills/cometchat-android-v6-migration/SKILL.md +67 -378
- package/skills/cometchat-android-v6-production/SKILL.md +41 -179
- package/skills/cometchat-android-v6-push/SKILL.md +39 -289
- package/skills/cometchat-android-v6-testing/SKILL.md +50 -265
- package/skills/cometchat-android-v6-troubleshooting/SKILL.md +70 -254
- package/skills/cometchat-angular-v5-calls/SKILL.md +193 -0
- package/skills/cometchat-angular-v5-components/SKILL.md +131 -0
- package/skills/cometchat-angular-v5-components/references/catalog.md +111 -0
- package/skills/cometchat-angular-v5-components/references/host-composed.md +46 -0
- package/skills/cometchat-angular-v5-core/SKILL.md +300 -0
- package/skills/cometchat-angular-v5-core/references/anti-patterns.md +49 -0
- package/skills/cometchat-angular-v5-core/references/component-props.md +55 -0
- package/skills/cometchat-angular-v5-core/references/dependencies.md +66 -0
- package/skills/cometchat-angular-v5-core/references/docs-map.md +132 -0
- package/skills/cometchat-angular-v5-core/references/layout.md +64 -0
- package/skills/cometchat-angular-v5-core/references/lifecycle.md +202 -0
- package/skills/cometchat-angular-v5-core/references/setup-credentials.md +137 -0
- package/skills/cometchat-angular-v5-core/references/theming.md +70 -0
- package/skills/cometchat-angular-v5-core/references/troubleshooting.md +27 -0
- package/skills/cometchat-angular-v5-customization/SKILL.md +94 -0
- package/skills/cometchat-angular-v5-features/SKILL.md +107 -0
- package/skills/cometchat-angular-v5-features/references/custom-messages.md +133 -0
- package/skills/cometchat-angular-v5-features/references/formatters.md +28 -0
- package/skills/cometchat-angular-v5-features/references/host-composed-extensions.md +85 -0
- package/skills/cometchat-angular-v5-migration/SKILL.md +40 -0
- package/skills/cometchat-angular-v5-migration/references/migration-guide.md +165 -0
- package/skills/cometchat-angular-v5-patterns/SKILL.md +107 -0
- package/skills/cometchat-angular-v5-placement/SKILL.md +133 -0
- package/skills/cometchat-angular-v5-placement/references/combined-app.md +174 -0
- package/skills/cometchat-angular-v5-placement/references/core-surface.md +199 -0
- package/skills/cometchat-angular-v5-production/SKILL.md +102 -0
- package/skills/cometchat-angular-v5-push/SKILL.md +61 -0
- package/skills/cometchat-angular-v5-testing/SKILL.md +112 -0
- package/skills/cometchat-angular-v5-troubleshooting/SKILL.md +96 -0
- package/skills/cometchat-audit/SKILL.md +61 -0
- package/skills/cometchat-compliance/SKILL.md +63 -0
- package/skills/cometchat-flutter-v5-sdk/SKILL.md +188 -0
- package/skills/cometchat-flutter-v5-sdk/references/doc-corrections.md +55 -0
- package/skills/cometchat-flutter-v5-sdk/references/docs-map.md +211 -0
- package/skills/cometchat-flutter-v5-sdk/references/platform-notes.md +48 -0
- package/skills/cometchat-flutter-v5-sdk/references/transcription.md +87 -0
- package/skills/cometchat-flutter-v6-calls/SKILL.md +75 -389
- package/skills/cometchat-flutter-v6-components/SKILL.md +88 -361
- package/skills/cometchat-flutter-v6-core/SKILL.md +154 -593
- package/skills/cometchat-flutter-v6-core/references/anti-patterns.md +55 -0
- package/skills/cometchat-flutter-v6-core/references/docs-map.md +143 -0
- package/skills/cometchat-flutter-v6-core/references/layout.md +45 -0
- package/skills/cometchat-flutter-v6-core/references/lifecycle.md +87 -0
- package/skills/cometchat-flutter-v6-core/references/setup-credentials.md +84 -0
- package/skills/cometchat-flutter-v6-core/references/troubleshooting.md +26 -0
- package/skills/cometchat-flutter-v6-customization/SKILL.md +70 -712
- package/skills/cometchat-flutter-v6-events/SKILL.md +79 -174
- package/skills/cometchat-flutter-v6-features/SKILL.md +55 -394
- package/skills/cometchat-flutter-v6-migration/SKILL.md +68 -367
- package/skills/cometchat-flutter-v6-migration/references/migration-guide.md +132 -0
- package/skills/cometchat-flutter-v6-patterns/SKILL.md +61 -0
- package/skills/cometchat-flutter-v6-placement/SKILL.md +94 -381
- package/skills/cometchat-flutter-v6-production/SKILL.md +59 -615
- package/skills/cometchat-flutter-v6-push/SKILL.md +46 -455
- package/skills/cometchat-flutter-v6-testing/SKILL.md +68 -299
- package/skills/cometchat-flutter-v6-troubleshooting/SKILL.md +54 -878
- package/skills/cometchat-i18n/SKILL.md +35 -404
- package/skills/cometchat-ios-calls/SKILL.md +112 -563
- package/skills/cometchat-ios-components/SKILL.md +44 -834
- package/skills/cometchat-ios-core/SKILL.md +182 -1068
- package/skills/cometchat-ios-core/references/anti-patterns.md +113 -0
- package/skills/cometchat-ios-core/references/docs-map.md +124 -0
- package/skills/cometchat-ios-core/references/install.md +23 -0
- package/skills/cometchat-ios-core/references/layout.md +219 -0
- package/skills/cometchat-ios-core/references/setup-credentials.md +197 -0
- package/skills/cometchat-ios-core/references/swiftui.md +91 -0
- package/skills/cometchat-ios-core/references/troubleshooting.md +100 -0
- package/skills/cometchat-ios-customization/SKILL.md +33 -968
- package/skills/cometchat-ios-features/SKILL.md +29 -738
- package/skills/cometchat-ios-migration/SKILL.md +39 -0
- package/skills/cometchat-ios-placement/SKILL.md +51 -729
- package/skills/cometchat-ios-production/SKILL.md +67 -723
- package/skills/cometchat-ios-push/SKILL.md +24 -602
- package/skills/cometchat-ios-testing/SKILL.md +36 -355
- package/skills/cometchat-ios-troubleshooting/SKILL.md +31 -989
- package/skills/cometchat-ios-v5-sdk/SKILL.md +161 -0
- package/skills/cometchat-ios-v5-sdk/references/docs-map.md +326 -0
- package/skills/cometchat-js-v5-sdk/SKILL.md +95 -0
- package/skills/cometchat-js-v5-sdk/references/docs-map.md +114 -0
- package/skills/cometchat-migrate-from-getstream/SKILL.md +65 -0
- package/skills/cometchat-migrate-from-getstream/references/concept-map.md +98 -0
- package/skills/cometchat-migrate-from-getstream/references/data-migration.md +74 -0
- package/skills/cometchat-migrate-from-getstream/references/feature-map.md +108 -0
- package/skills/cometchat-migrate-from-getstream/references/inventory.md +82 -0
- package/skills/cometchat-migrate-from-getstream/references/native-build.md +9 -0
- package/skills/cometchat-migrate-from-getstream/references/report-template.md +59 -0
- package/skills/cometchat-migrate-from-sendbird/SKILL.md +64 -0
- package/skills/cometchat-migrate-from-sendbird/references/concept-map.md +99 -0
- package/skills/cometchat-migrate-from-sendbird/references/data-migration.md +74 -0
- package/skills/cometchat-migrate-from-sendbird/references/feature-map.md +104 -0
- package/skills/cometchat-migrate-from-sendbird/references/inventory.md +86 -0
- package/skills/cometchat-migrate-from-sendbird/references/native-build.md +10 -0
- package/skills/cometchat-migrate-from-sendbird/references/report-template.md +59 -0
- package/skills/cometchat-migrate-from-twilio/SKILL.md +52 -0
- package/skills/cometchat-migrate-from-twilio/references/concept-map.md +49 -0
- package/skills/cometchat-migrate-from-twilio/references/data-migration.md +50 -0
- package/skills/cometchat-migrate-from-twilio/references/feature-map.md +27 -0
- package/skills/cometchat-migrate-from-twilio/references/inventory.md +53 -0
- package/skills/cometchat-migrate-from-twilio/references/report-template.md +52 -0
- package/skills/cometchat-moderation/SKILL.md +58 -0
- package/skills/cometchat-onboarding/SKILL.md +92 -0
- package/skills/cometchat-onboarding/references/archetypes.md +51 -0
- package/skills/cometchat-onboarding/references/calling-first.md +77 -0
- package/skills/cometchat-onboarding/references/not-in-this-pack.md +8 -0
- package/skills/cometchat-onboarding/references/plan-artifact.md +133 -0
- package/skills/cometchat-onboarding/references/platforms.md +105 -0
- package/skills/cometchat-react-native-bare-patterns/SKILL.md +120 -0
- package/skills/cometchat-react-native-calls/SKILL.md +200 -0
- package/skills/cometchat-react-native-components/SKILL.md +142 -0
- package/skills/cometchat-react-native-core/SKILL.md +335 -0
- package/skills/cometchat-react-native-core/references/anti-patterns.md +79 -0
- package/skills/cometchat-react-native-core/references/component-props.md +105 -0
- package/skills/cometchat-react-native-core/references/dependencies.md +62 -0
- package/skills/cometchat-react-native-core/references/docs-map.md +127 -0
- package/skills/cometchat-react-native-core/references/layout.md +61 -0
- package/skills/cometchat-react-native-core/references/lifecycle.md +64 -0
- package/skills/cometchat-react-native-core/references/setup-credentials.md +39 -0
- package/skills/cometchat-react-native-customization/SKILL.md +198 -0
- package/skills/cometchat-react-native-expo-patterns/SKILL.md +116 -0
- package/skills/cometchat-react-native-features/SKILL.md +122 -0
- package/skills/cometchat-react-native-migration/SKILL.md +103 -0
- package/skills/cometchat-react-native-placement/SKILL.md +158 -0
- package/skills/cometchat-react-native-production/SKILL.md +79 -0
- package/skills/cometchat-react-native-push/SKILL.md +88 -0
- package/skills/cometchat-react-native-sdk/SKILL.md +133 -0
- package/skills/cometchat-react-native-sdk/references/method-map.md +239 -0
- package/skills/cometchat-react-native-sdk/references/page-map.md +96 -0
- package/skills/cometchat-react-native-testing/SKILL.md +94 -0
- package/skills/cometchat-react-native-troubleshooting/SKILL.md +174 -0
- package/skills/cometchat-react-native-v5-sdk/SKILL.md +150 -0
- package/skills/cometchat-react-native-v5-sdk/references/docs-map.md +127 -0
- package/skills/cometchat-react-native-v5-sdk/references/ringing-voip.md +369 -0
- package/skills/cometchat-react-v7-calls/SKILL.md +75 -0
- package/skills/cometchat-react-v7-components/SKILL.md +72 -0
- package/skills/cometchat-react-v7-core/SKILL.md +101 -0
- package/skills/cometchat-react-v7-core/references/anti-patterns.md +19 -0
- package/skills/cometchat-react-v7-core/references/component-props.md +82 -0
- package/skills/cometchat-react-v7-core/references/dependencies.md +23 -0
- package/skills/cometchat-react-v7-core/references/docs-map.md +117 -0
- package/skills/cometchat-react-v7-core/references/layout.md +150 -0
- package/skills/cometchat-react-v7-core/references/lifecycle.md +74 -0
- package/skills/cometchat-react-v7-core/references/setup-credentials.md +58 -0
- package/skills/cometchat-react-v7-core/references/ssr.md +11 -0
- package/skills/cometchat-react-v7-core/references/theming.md +52 -0
- package/skills/cometchat-react-v7-customization/SKILL.md +84 -0
- package/skills/cometchat-react-v7-features/SKILL.md +92 -0
- package/skills/cometchat-react-v7-migration/SKILL.md +39 -0
- package/skills/cometchat-react-v7-migration/references/migration-guide.md +119 -0
- package/skills/cometchat-react-v7-patterns/SKILL.md +43 -0
- package/skills/cometchat-react-v7-placement/SKILL.md +106 -0
- package/skills/cometchat-react-v7-placement/references/recipes.md +354 -0
- package/skills/cometchat-react-v7-production/SKILL.md +84 -0
- package/skills/cometchat-react-v7-push/SKILL.md +53 -0
- package/skills/cometchat-react-v7-testing/SKILL.md +60 -0
- package/skills/cometchat-react-v7-troubleshooting/SKILL.md +47 -0
- package/skills/cometchat-security/SKILL.md +80 -0
- package/skills/cometchat-self-host/SKILL.md +56 -0
- package/test-suite/README.md +70 -0
- package/test-suite/catalogs/android-calls-v5.json +830 -0
- package/test-suite/catalogs/android-calls-v5.symbols.txt +499 -0
- package/test-suite/catalogs/android-v6.json +1646 -0
- package/test-suite/catalogs/android-v6.symbols.txt +298 -0
- package/test-suite/catalogs/angular-v5.json +7587 -0
- package/test-suite/catalogs/flutter-calls-v5.json +196 -0
- package/test-suite/catalogs/flutter-calls-v5.symbols.txt +59 -0
- package/test-suite/catalogs/flutter-v6.json +651 -0
- package/test-suite/catalogs/ios-calls-v5.json +158 -0
- package/test-suite/catalogs/ios-calls-v5.symbols.txt +70 -0
- package/test-suite/catalogs/ios-v5.json +1383 -0
- package/test-suite/catalogs/ios-v5.symbols.txt +699 -0
- package/test-suite/catalogs/rn-calls-v5.json +134 -0
- package/test-suite/catalogs/rn-sdk-v4.json +672 -0
- package/test-suite/catalogs/rn-v5.json +449 -0
- package/test-suite/catalogs/sdk-android-v5.json +514 -0
- package/test-suite/catalogs/sdk-android-v5.symbols.txt +254 -0
- package/test-suite/catalogs/sdk-jsv4.json +800 -0
- package/test-suite/catalogs/web-calls-v5.json +195 -0
- package/test-suite/catalogs/web-v7.json +1243 -0
- package/test-suite/scripts/build-registry.mjs +113 -0
- package/test-suite/scripts/catalog-refresh-dart.mjs +151 -0
- package/test-suite/scripts/catalog-refresh.mjs +100 -0
- package/test-suite/scripts/lint-skills.mjs +932 -0
- package/test-suite/scripts/measure-tokens.mjs +169 -0
- package/test-suite/scripts/typecheck-fences-dart.mjs +437 -0
- package/test-suite/scripts/typecheck-fences-kotlin.mjs +269 -0
- package/test-suite/scripts/typecheck-fences.mjs +206 -0
- package/test-suite/scripts/verify-catalog.mjs +242 -0
- package/test-suite/scripts/verify-contract-fences.mjs +94 -0
- package/test-suite/scripts/verify-detection.mjs +178 -0
- package/test-suite/scripts/verify-docs-base.mjs +91 -0
- package/test-suite/scripts/verify-family-agnostic.mjs +134 -0
- package/test-suite/scripts/verify-golden-path.mjs +138 -0
- package/test-suite/scripts/verify-oracle-components.mjs +133 -0
- package/test-suite/scripts/verify-template-bindings.mjs +148 -0
- package/test-suite/typecheck/angular-v5/package.json +21 -0
- package/test-suite/typecheck/angular-v5/tsconfig.json +21 -0
- package/test-suite/typecheck/flutter-v6/analysis_options.yaml +25 -0
- package/test-suite/typecheck/flutter-v6/pubspec.yaml +21 -0
- package/test-suite/typecheck/web-v7/package.json +18 -0
- package/test-suite/typecheck/web-v7/tsconfig.json +19 -0
- package/bin/install.js +0 -1003
- package/skills/.claude-plugin/marketplace.json +0 -86
- package/skills/cometchat/references/asking-questions.md +0 -48
- package/skills/cometchat-android-v5/SKILL.md +0 -121
- package/skills/cometchat-android-v5-calls/SKILL.md +0 -429
- package/skills/cometchat-android-v5-calls/references/README.md +0 -53
- package/skills/cometchat-android-v5-calls/references/add-calls-to-existing-chat.md +0 -197
- package/skills/cometchat-android-v5-calls/references/audio-controls.md +0 -91
- package/skills/cometchat-android-v5-calls/references/background-handling.md +0 -168
- package/skills/cometchat-android-v5-calls/references/call-layouts.md +0 -131
- package/skills/cometchat-android-v5-calls/references/call-logs.md +0 -113
- package/skills/cometchat-android-v5-calls/references/call-session.md +0 -274
- package/skills/cometchat-android-v5-calls/references/custom-ui.md +0 -150
- package/skills/cometchat-android-v5-calls/references/event-listeners.md +0 -123
- package/skills/cometchat-android-v5-calls/references/group-calls.md +0 -205
- package/skills/cometchat-android-v5-calls/references/idle-timeout.md +0 -117
- package/skills/cometchat-android-v5-calls/references/in-call-chat.md +0 -134
- package/skills/cometchat-android-v5-calls/references/join-session.md +0 -120
- package/skills/cometchat-android-v5-calls/references/migration-v4-to-v5.md +0 -222
- package/skills/cometchat-android-v5-calls/references/participant-management.md +0 -110
- package/skills/cometchat-android-v5-calls/references/picture-in-picture.md +0 -106
- package/skills/cometchat-android-v5-calls/references/raise-hand.md +0 -248
- package/skills/cometchat-android-v5-calls/references/recording.md +0 -101
- package/skills/cometchat-android-v5-calls/references/ringing-integration.md +0 -152
- package/skills/cometchat-android-v5-calls/references/screen-sharing.md +0 -78
- package/skills/cometchat-android-v5-calls/references/server-fcm-voip.md +0 -215
- package/skills/cometchat-android-v5-calls/references/session-settings.md +0 -121
- package/skills/cometchat-android-v5-calls/references/setup.md +0 -137
- package/skills/cometchat-android-v5-calls/references/share-invite.md +0 -156
- package/skills/cometchat-android-v5-calls/references/video-controls.md +0 -87
- package/skills/cometchat-android-v5-calls/references/voip-calling.md +0 -526
- package/skills/cometchat-android-v5-components/SKILL.md +0 -431
- package/skills/cometchat-android-v5-core/SKILL.md +0 -486
- package/skills/cometchat-android-v5-customization/SKILL.md +0 -469
- package/skills/cometchat-android-v5-extensions/SKILL.md +0 -127
- package/skills/cometchat-android-v5-features/SKILL.md +0 -131
- package/skills/cometchat-android-v5-placement/SKILL.md +0 -277
- package/skills/cometchat-android-v5-production/SKILL.md +0 -95
- package/skills/cometchat-android-v5-push/SKILL.md +0 -619
- package/skills/cometchat-android-v5-testing/SKILL.md +0 -188
- package/skills/cometchat-android-v5-theming/SKILL.md +0 -167
- package/skills/cometchat-android-v5-troubleshooting/SKILL.md +0 -74
- package/skills/cometchat-android-v6/SKILL.md +0 -108
- package/skills/cometchat-android-v6-calls/references/add-calls-to-existing-chat.md +0 -97
- package/skills/cometchat-android-v6-calls/references/advanced-features.md +0 -87
- package/skills/cometchat-android-v6-calls/references/call-layouts.md +0 -100
- package/skills/cometchat-android-v6-calls/references/call-session.md +0 -163
- package/skills/cometchat-android-v6-calls/references/device-management.md +0 -172
- package/skills/cometchat-android-v6-calls/references/group-calls.md +0 -191
- package/skills/cometchat-android-v6-calls/references/idle-timeout.md +0 -110
- package/skills/cometchat-android-v6-calls/references/in-call-chat.md +0 -141
- package/skills/cometchat-android-v6-calls/references/raise-hand.md +0 -188
- package/skills/cometchat-android-v6-calls/references/ringing-integration.md +0 -176
- package/skills/cometchat-android-v6-calls/references/server-fcm-voip.md +0 -127
- package/skills/cometchat-android-v6-calls/references/share-invite.md +0 -105
- package/skills/cometchat-android-v6-compose-theming/SKILL.md +0 -250
- package/skills/cometchat-android-v6-kotlin-theming/SKILL.md +0 -233
- package/skills/cometchat-angular-calls/SKILL.md +0 -380
- package/skills/cometchat-angular-calls/references/add-calls-to-existing-chat.md +0 -96
- package/skills/cometchat-angular-calls/references/call-layouts.md +0 -123
- package/skills/cometchat-angular-calls/references/call-session.md +0 -167
- package/skills/cometchat-angular-calls/references/custom-ui.md +0 -239
- package/skills/cometchat-angular-calls/references/device-management.md +0 -154
- package/skills/cometchat-angular-calls/references/group-calls.md +0 -433
- package/skills/cometchat-angular-calls/references/idle-timeout.md +0 -161
- package/skills/cometchat-angular-calls/references/in-call-chat.md +0 -148
- package/skills/cometchat-angular-calls/references/lazy-loading-pitfalls.md +0 -205
- package/skills/cometchat-angular-calls/references/migration-v4-to-v5.md +0 -53
- package/skills/cometchat-angular-calls/references/ngzone-and-async-callbacks.md +0 -184
- package/skills/cometchat-angular-calls/references/picture-in-picture.md +0 -285
- package/skills/cometchat-angular-calls/references/raise-hand.md +0 -172
- package/skills/cometchat-angular-calls/references/recording-screen-share.md +0 -260
- package/skills/cometchat-angular-calls/references/ringing-integration.md +0 -133
- package/skills/cometchat-angular-calls/references/server-web-push-vapid.md +0 -100
- package/skills/cometchat-angular-calls/references/share-invite.md +0 -122
- package/skills/cometchat-angular-calls/references/virtual-background.md +0 -29
- package/skills/cometchat-angular-components/SKILL.md +0 -235
- package/skills/cometchat-angular-core/SKILL.md +0 -386
- package/skills/cometchat-angular-customization/SKILL.md +0 -616
- package/skills/cometchat-angular-features/SKILL.md +0 -329
- package/skills/cometchat-angular-patterns/SKILL.md +0 -256
- package/skills/cometchat-angular-placement/SKILL.md +0 -314
- package/skills/cometchat-angular-production/SKILL.md +0 -564
- package/skills/cometchat-angular-push/SKILL.md +0 -389
- package/skills/cometchat-angular-testing/SKILL.md +0 -605
- package/skills/cometchat-angular-theming/SKILL.md +0 -290
- package/skills/cometchat-angular-troubleshooting/SKILL.md +0 -364
- package/skills/cometchat-astro-patterns/SKILL.md +0 -708
- package/skills/cometchat-calls/SKILL.md +0 -364
- package/skills/cometchat-calls/references/use-case-broadcast.md +0 -199
- package/skills/cometchat-calls/references/use-case-marketplace.md +0 -157
- package/skills/cometchat-calls/references/use-case-support.md +0 -189
- package/skills/cometchat-calls/references/use-case-team.md +0 -180
- package/skills/cometchat-calls/references/use-case-telehealth.md +0 -153
- package/skills/cometchat-components/SKILL.md +0 -1142
- package/skills/cometchat-core/SKILL.md +0 -1048
- package/skills/cometchat-customization/SKILL.md +0 -580
- package/skills/cometchat-customization/references/component-catalog.md +0 -236
- package/skills/cometchat-features/SKILL.md +0 -861
- package/skills/cometchat-flutter-v5/SKILL.md +0 -173
- package/skills/cometchat-flutter-v5-calls/SKILL.md +0 -455
- package/skills/cometchat-flutter-v5-calls/references/add-calls-to-existing-chat.md +0 -193
- package/skills/cometchat-flutter-v5-calls/references/call-layouts.md +0 -103
- package/skills/cometchat-flutter-v5-calls/references/call-session.md +0 -285
- package/skills/cometchat-flutter-v5-calls/references/device-management.md +0 -124
- package/skills/cometchat-flutter-v5-calls/references/group-calls.md +0 -181
- package/skills/cometchat-flutter-v5-calls/references/idle-timeout.md +0 -99
- package/skills/cometchat-flutter-v5-calls/references/in-call-chat.md +0 -135
- package/skills/cometchat-flutter-v5-calls/references/migration-v4-to-v5.md +0 -210
- package/skills/cometchat-flutter-v5-calls/references/raise-hand.md +0 -255
- package/skills/cometchat-flutter-v5-calls/references/ringing-integration.md +0 -196
- package/skills/cometchat-flutter-v5-calls/references/server-push-bridge.md +0 -101
- package/skills/cometchat-flutter-v5-calls/references/share-invite.md +0 -148
- package/skills/cometchat-flutter-v5-conversations/SKILL.md +0 -118
- package/skills/cometchat-flutter-v5-core/SKILL.md +0 -239
- package/skills/cometchat-flutter-v5-customization/SKILL.md +0 -358
- package/skills/cometchat-flutter-v5-events/SKILL.md +0 -156
- package/skills/cometchat-flutter-v5-messages/SKILL.md +0 -259
- package/skills/cometchat-flutter-v5-production/SKILL.md +0 -216
- package/skills/cometchat-flutter-v5-push/SKILL.md +0 -285
- package/skills/cometchat-flutter-v5-testing/SKILL.md +0 -401
- package/skills/cometchat-flutter-v5-theming/SKILL.md +0 -161
- package/skills/cometchat-flutter-v5-troubleshooting/SKILL.md +0 -130
- package/skills/cometchat-flutter-v5-users-groups/SKILL.md +0 -152
- package/skills/cometchat-flutter-v6/SKILL.md +0 -446
- package/skills/cometchat-flutter-v6-calls/references/add-calls-to-existing-chat.md +0 -136
- package/skills/cometchat-flutter-v6-calls/references/advanced-features.md +0 -89
- package/skills/cometchat-flutter-v6-calls/references/call-layouts.md +0 -105
- package/skills/cometchat-flutter-v6-calls/references/call-session.md +0 -229
- package/skills/cometchat-flutter-v6-calls/references/device-management.md +0 -105
- package/skills/cometchat-flutter-v6-calls/references/group-calls.md +0 -190
- package/skills/cometchat-flutter-v6-calls/references/idle-timeout.md +0 -88
- package/skills/cometchat-flutter-v6-calls/references/in-call-chat.md +0 -125
- package/skills/cometchat-flutter-v6-calls/references/raise-hand.md +0 -275
- package/skills/cometchat-flutter-v6-calls/references/ringing-integration.md +0 -171
- package/skills/cometchat-flutter-v6-calls/references/server-push-bridge.md +0 -93
- package/skills/cometchat-flutter-v6-calls/references/share-invite.md +0 -102
- package/skills/cometchat-flutter-v6-conversations/SKILL.md +0 -238
- package/skills/cometchat-flutter-v6-messages/SKILL.md +0 -384
- package/skills/cometchat-flutter-v6-theming/SKILL.md +0 -293
- package/skills/cometchat-flutter-v6-users-groups/SKILL.md +0 -224
- package/skills/cometchat-ios/SKILL.md +0 -325
- package/skills/cometchat-ios-calls/references/add-calls-to-existing-chat.md +0 -181
- package/skills/cometchat-ios-calls/references/audio-modes-and-controls.md +0 -45
- package/skills/cometchat-ios-calls/references/avaudiosession-routing.md +0 -188
- package/skills/cometchat-ios-calls/references/call-layouts.md +0 -76
- package/skills/cometchat-ios-calls/references/call-session.md +0 -218
- package/skills/cometchat-ios-calls/references/callkit-and-pushkit.md +0 -357
- package/skills/cometchat-ios-calls/references/custom-ui.md +0 -322
- package/skills/cometchat-ios-calls/references/device-management.md +0 -171
- package/skills/cometchat-ios-calls/references/group-calls.md +0 -359
- package/skills/cometchat-ios-calls/references/idle-timeout.md +0 -184
- package/skills/cometchat-ios-calls/references/in-call-chat.md +0 -179
- package/skills/cometchat-ios-calls/references/migration-v4-to-v5.md +0 -196
- package/skills/cometchat-ios-calls/references/picture-in-picture.md +0 -246
- package/skills/cometchat-ios-calls/references/raise-hand.md +0 -26
- package/skills/cometchat-ios-calls/references/recording-screen-share.md +0 -252
- package/skills/cometchat-ios-calls/references/ringing-integration.md +0 -143
- package/skills/cometchat-ios-calls/references/server-apns-pushkit.md +0 -267
- package/skills/cometchat-ios-calls/references/share-invite.md +0 -148
- package/skills/cometchat-ios-calls/references/swiftui-uikit-hosting.md +0 -246
- package/skills/cometchat-ios-calls/references/voip-cert-setup.md +0 -166
- package/skills/cometchat-ios-theming/SKILL.md +0 -667
- package/skills/cometchat-native-bare-patterns/SKILL.md +0 -550
- package/skills/cometchat-native-calls/SKILL.md +0 -671
- package/skills/cometchat-native-calls/references/add-calls-to-existing-chat.md +0 -203
- package/skills/cometchat-native-calls/references/call-layouts.md +0 -125
- package/skills/cometchat-native-calls/references/call-session.md +0 -182
- package/skills/cometchat-native-calls/references/custom-ui.md +0 -254
- package/skills/cometchat-native-calls/references/device-management.md +0 -158
- package/skills/cometchat-native-calls/references/expo-vs-bare.md +0 -179
- package/skills/cometchat-native-calls/references/group-calls.md +0 -296
- package/skills/cometchat-native-calls/references/idle-timeout.md +0 -128
- package/skills/cometchat-native-calls/references/in-call-chat.md +0 -145
- package/skills/cometchat-native-calls/references/migration-v4-to-v5.md +0 -72
- package/skills/cometchat-native-calls/references/picture-in-picture.md +0 -276
- package/skills/cometchat-native-calls/references/raise-hand.md +0 -205
- package/skills/cometchat-native-calls/references/recording-screen-share.md +0 -169
- package/skills/cometchat-native-calls/references/ringing-integration.md +0 -118
- package/skills/cometchat-native-calls/references/server-push-bridge.md +0 -135
- package/skills/cometchat-native-calls/references/server-push-payloads.md +0 -193
- package/skills/cometchat-native-calls/references/share-invite.md +0 -146
- package/skills/cometchat-native-calls/references/voip-push-end-to-end.md +0 -319
- package/skills/cometchat-native-components/SKILL.md +0 -628
- package/skills/cometchat-native-core/SKILL.md +0 -679
- package/skills/cometchat-native-customization/SKILL.md +0 -716
- package/skills/cometchat-native-expo-patterns/SKILL.md +0 -552
- package/skills/cometchat-native-features/SKILL.md +0 -638
- package/skills/cometchat-native-placement/SKILL.md +0 -509
- package/skills/cometchat-native-production/SKILL.md +0 -700
- package/skills/cometchat-native-push/SKILL.md +0 -594
- package/skills/cometchat-native-testing/SKILL.md +0 -582
- package/skills/cometchat-native-theming/SKILL.md +0 -681
- package/skills/cometchat-native-troubleshooting/SKILL.md +0 -501
- package/skills/cometchat-nextjs-patterns/SKILL.md +0 -899
- package/skills/cometchat-placement/SKILL.md +0 -1360
- package/skills/cometchat-production/SKILL.md +0 -1027
- package/skills/cometchat-react-calls/SKILL.md +0 -752
- package/skills/cometchat-react-calls/references/add-calls-to-existing-chat.md +0 -146
- package/skills/cometchat-react-calls/references/call-layouts.md +0 -160
- package/skills/cometchat-react-calls/references/call-session.md +0 -235
- package/skills/cometchat-react-calls/references/custom-ui.md +0 -247
- package/skills/cometchat-react-calls/references/device-management.md +0 -210
- package/skills/cometchat-react-calls/references/group-calls.md +0 -257
- package/skills/cometchat-react-calls/references/idle-timeout.md +0 -188
- package/skills/cometchat-react-calls/references/in-call-chat.md +0 -212
- package/skills/cometchat-react-calls/references/migration-v4-to-v5.md +0 -170
- package/skills/cometchat-react-calls/references/picture-in-picture.md +0 -245
- package/skills/cometchat-react-calls/references/raise-hand.md +0 -238
- package/skills/cometchat-react-calls/references/recording-screen-share.md +0 -144
- package/skills/cometchat-react-calls/references/ringing-integration.md +0 -255
- package/skills/cometchat-react-calls/references/server-web-push-vapid.md +0 -241
- package/skills/cometchat-react-calls/references/share-invite.md +0 -175
- package/skills/cometchat-react-calls/references/testing-calls-on-web.md +0 -216
- package/skills/cometchat-react-calls/references/virtual-background.md +0 -32
- package/skills/cometchat-react-calls/references/voip-and-web-push.md +0 -165
- package/skills/cometchat-react-patterns/SKILL.md +0 -628
- package/skills/cometchat-react-push/SKILL.md +0 -634
- package/skills/cometchat-react-router-patterns/SKILL.md +0 -758
- package/skills/cometchat-react-testing/SKILL.md +0 -413
- package/skills/cometchat-theming/SKILL.md +0 -498
- package/skills/cometchat-troubleshooting/SKILL.md +0 -294
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
# Server-side push routing for Flutter V5 (iOS PushKit + Android FCM)
|
|
2
|
-
|
|
3
|
-
Same server architecture as React Native — your server uses the iOS APNs PushKit canonical for iPhones and the Android FCM HTTP v1 canonical for Android. Flutter-specific changes are in token registration on the client.
|
|
4
|
-
|
|
5
|
-
**Canonical docs:**
|
|
6
|
-
- iOS: `cometchat-ios-calls/references/server-apns-pushkit.md`
|
|
7
|
-
- Android: `cometchat-android-v5-calls/references/server-fcm-voip.md`
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
## Dependencies
|
|
12
|
-
|
|
13
|
-
```yaml
|
|
14
|
-
dependencies:
|
|
15
|
-
flutter_callkit_incoming: ^2.0.4
|
|
16
|
-
flutter_voip_pushkit: ^0.2.1
|
|
17
|
-
firebase_messaging: ^15.0.0
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
## Token registration (Flutter client)
|
|
23
|
-
|
|
24
|
-
```dart
|
|
25
|
-
import 'dart:io';
|
|
26
|
-
import 'package:flutter_voip_pushkit/flutter_voip_pushkit.dart';
|
|
27
|
-
import 'package:firebase_messaging/firebase_messaging.dart';
|
|
28
|
-
|
|
29
|
-
class CallPushService {
|
|
30
|
-
Future<void> registerCallTokens(String userUid) async {
|
|
31
|
-
if (Platform.isIOS) {
|
|
32
|
-
final voip = FlutterVoipPushKit();
|
|
33
|
-
voip.onTokenRefresh.listen((token) async {
|
|
34
|
-
await api.registerCallToken(
|
|
35
|
-
uid: userUid,
|
|
36
|
-
platform: 'ios-voip',
|
|
37
|
-
token: token,
|
|
38
|
-
);
|
|
39
|
-
});
|
|
40
|
-
voip.onPushNotification.listen((payload) {
|
|
41
|
-
// flutter_callkit_incoming surfaces the OS UI from here
|
|
42
|
-
});
|
|
43
|
-
// Trigger token registration
|
|
44
|
-
await voip.configure();
|
|
45
|
-
} else if (Platform.isAndroid) {
|
|
46
|
-
final messaging = FirebaseMessaging.instance;
|
|
47
|
-
await messaging.requestPermission();
|
|
48
|
-
final token = await messaging.getToken();
|
|
49
|
-
if (token != null) {
|
|
50
|
-
await api.registerCallToken(
|
|
51
|
-
uid: userUid,
|
|
52
|
-
platform: 'android-fcm',
|
|
53
|
-
token: token,
|
|
54
|
-
);
|
|
55
|
-
}
|
|
56
|
-
messaging.onTokenRefresh.listen((newToken) async {
|
|
57
|
-
await api.registerCallToken(
|
|
58
|
-
uid: userUid,
|
|
59
|
-
platform: 'android-fcm',
|
|
60
|
-
token: newToken,
|
|
61
|
-
);
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
---
|
|
69
|
-
|
|
70
|
-
## Server-side: same as RN
|
|
71
|
-
|
|
72
|
-
Identical webhook + dispatcher to RN — the platform-specific server templates do all the work. See `cometchat-native-calls/references/server-push-bridge.md` for the dispatcher code.
|
|
73
|
-
|
|
74
|
-
---
|
|
75
|
-
|
|
76
|
-
## Anti-patterns
|
|
77
|
-
|
|
78
|
-
RN sister rules apply, plus Flutter-specific:
|
|
79
|
-
|
|
80
|
-
1. **Calling `voip.configure()` before login.** Same problem as RN — register AFTER CometChat login.
|
|
81
|
-
2. **Forgetting `firebase_messaging` background isolate setup.** Android background pushes when the app is killed need `FirebaseMessaging.onBackgroundMessage(handler)` registered in `main.dart` before `runApp`.
|
|
82
|
-
3. **Skipping `flutter_callkit_incoming.showCallkitIncoming` in the push handler.** Without this, Flutter doesn't surface the OS-level call UI even though the push arrived.
|
|
83
|
-
|
|
84
|
-
---
|
|
85
|
-
|
|
86
|
-
## Verification checklist
|
|
87
|
-
|
|
88
|
-
- [ ] iOS: `FlutterVoipPushKit.configure()` + onTokenRefresh listener
|
|
89
|
-
- [ ] Android: `FirebaseMessaging.instance.getToken()` + onTokenRefresh
|
|
90
|
-
- [ ] Background isolate handler for Android (`onBackgroundMessage`)
|
|
91
|
-
- [ ] Server has both APNs + FCM dispatchers
|
|
92
|
-
- [ ] Real-device smoke: both iOS and Android ring when caller dials
|
|
93
|
-
|
|
94
|
-
---
|
|
95
|
-
|
|
96
|
-
## Pointers
|
|
97
|
-
|
|
98
|
-
- `cometchat-ios-calls/references/server-apns-pushkit.md` — iOS canonical
|
|
99
|
-
- `cometchat-android-v5-calls/references/server-fcm-voip.md` — Android canonical
|
|
100
|
-
- `cometchat-native-calls/references/server-push-bridge.md` — RN sister (same dispatcher pattern)
|
|
101
|
-
- `cometchat-flutter-v5-calls` SKILL.md — Flutter calls architecture
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
# Share invite on Flutter V5 (GetX)
|
|
2
|
-
|
|
3
|
-
Same SDK API. Flutter-specific: `share_plus` package wraps both iOS UIActivityViewController and Android Intent.ACTION_SEND under one cross-platform API.
|
|
4
|
-
|
|
5
|
-
**Canonical docs:** https://www.cometchat.com/docs/calls/flutter/share-invite
|
|
6
|
-
**Read first:** `cometchat-react-calls/references/share-invite.md` — deep-link rule, dialog UX.
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## Dependencies
|
|
11
|
-
|
|
12
|
-
```yaml
|
|
13
|
-
dependencies:
|
|
14
|
-
share_plus: ^10.0.0
|
|
15
|
-
uni_links: ^0.5.1 # for deep-link handling
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
---
|
|
19
|
-
|
|
20
|
-
## Hard rule: deep-link routing
|
|
21
|
-
|
|
22
|
-
Configure both platforms:
|
|
23
|
-
|
|
24
|
-
**iOS** (`ios/Runner/Info.plist`):
|
|
25
|
-
```xml
|
|
26
|
-
<key>com.apple.developer.associated-domains</key>
|
|
27
|
-
<array><string>applinks:yourapp.com</string></array>
|
|
28
|
-
```
|
|
29
|
-
Plus apple-app-site-association on your domain (see iOS reference).
|
|
30
|
-
|
|
31
|
-
**Android** (`android/app/src/main/AndroidManifest.xml`):
|
|
32
|
-
```xml
|
|
33
|
-
<activity android:name=".MainActivity" ...>
|
|
34
|
-
<intent-filter android:autoVerify="true">
|
|
35
|
-
<action android:name="android.intent.action.VIEW" />
|
|
36
|
-
<category android:name="android.intent.category.DEFAULT" />
|
|
37
|
-
<category android:name="android.intent.category.BROWSABLE" />
|
|
38
|
-
<data android:scheme="https"
|
|
39
|
-
android:host="yourapp.com"
|
|
40
|
-
android:pathPrefix="/call" />
|
|
41
|
-
</intent-filter>
|
|
42
|
-
</activity>
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
Plus the corresponding `assetlinks.json` on your domain.
|
|
46
|
-
|
|
47
|
-
Handle in app:
|
|
48
|
-
```dart
|
|
49
|
-
void initDeepLinks() {
|
|
50
|
-
uriLinkStream.listen((Uri? uri) {
|
|
51
|
-
if (uri == null) return;
|
|
52
|
-
if (uri.pathSegments.length >= 2 && uri.pathSegments[0] == 'call') {
|
|
53
|
-
final sessionId = uri.pathSegments[1];
|
|
54
|
-
Get.toNamed('/call/$sessionId');
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
---
|
|
61
|
-
|
|
62
|
-
## SDK API
|
|
63
|
-
|
|
64
|
-
```dart
|
|
65
|
-
import 'package:cometchat_calls_sdk/cometchat_calls_sdk.dart';
|
|
66
|
-
|
|
67
|
-
final settings = (SessionSettingsBuilder()
|
|
68
|
-
..hideShareInviteButton(false)) // session_settings.dart:221
|
|
69
|
-
.build();
|
|
70
|
-
|
|
71
|
-
// The share-invite tap arrives on ButtonClickListeners
|
|
72
|
-
// (src/listener/button_click_listeners.dart:13), registered via
|
|
73
|
-
// CallSession.getInstance()?.addButtonClickListener(...) (call_session.dart:90):
|
|
74
|
-
@override
|
|
75
|
-
void onShareInviteButtonClicked() {
|
|
76
|
-
Get.find<ShareInviteController>().share(sessionId);
|
|
77
|
-
}
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
---
|
|
81
|
-
|
|
82
|
-
## share_plus
|
|
83
|
-
|
|
84
|
-
```dart
|
|
85
|
-
import 'package:share_plus/share_plus.dart';
|
|
86
|
-
|
|
87
|
-
class ShareInviteController extends GetxController {
|
|
88
|
-
Future<void> share(String sessionId) async {
|
|
89
|
-
final url = 'https://yourapp.com/call/$sessionId';
|
|
90
|
-
final result = await Share.share(
|
|
91
|
-
"I'm on a call — tap to join.\n$url",
|
|
92
|
-
subject: 'Join my call', // Android: title; iOS: ignored
|
|
93
|
-
);
|
|
94
|
-
|
|
95
|
-
if (result.status == ShareResultStatus.success) {
|
|
96
|
-
// logged + maybe haptic feedback
|
|
97
|
-
}
|
|
98
|
-
// dismissed/unavailable: silent
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
`Share.share` opens iOS UIActivityViewController on iOS and the Android chooser on Android. The same call works on both.
|
|
104
|
-
|
|
105
|
-
---
|
|
106
|
-
|
|
107
|
-
## iPad popover anchor
|
|
108
|
-
|
|
109
|
-
`share_plus` requires a source rect on iPad:
|
|
110
|
-
|
|
111
|
-
```dart
|
|
112
|
-
final box = context.findRenderObject() as RenderBox?;
|
|
113
|
-
await Share.share(
|
|
114
|
-
text,
|
|
115
|
-
sharePositionOrigin: box != null ? box.localToGlobal(Offset.zero) & box.size : null,
|
|
116
|
-
);
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
Pass `sharePositionOrigin` from the button's render box. Without it, share sheet crashes on iPad.
|
|
120
|
-
|
|
121
|
-
---
|
|
122
|
-
|
|
123
|
-
## Anti-patterns
|
|
124
|
-
|
|
125
|
-
Web sister rules apply, plus Flutter-specific:
|
|
126
|
-
|
|
127
|
-
1. **Calling `Share.share` without iPad anchor.** Crash on iPad in production.
|
|
128
|
-
2. **Hard-coding URL.** Use `dotenv` or `--dart-define=APP_URL=...`.
|
|
129
|
-
3. **No deep-link config for both platforms.** Only iOS works (or only Android), not both — partial UX.
|
|
130
|
-
|
|
131
|
-
---
|
|
132
|
-
|
|
133
|
-
## Verification checklist
|
|
134
|
-
|
|
135
|
-
- [ ] `share_plus` installed
|
|
136
|
-
- [ ] Associated Domains (iOS) + auto-verified app links (Android) configured
|
|
137
|
-
- [ ] `assetlinks.json` + `apple-app-site-association` hosted
|
|
138
|
-
- [ ] `Share.share` called with `sharePositionOrigin` for iPad
|
|
139
|
-
- [ ] App URL via env, not hard-coded
|
|
140
|
-
- [ ] Real-device smoke: share via Messages on iOS, WhatsApp on Android → opens app
|
|
141
|
-
|
|
142
|
-
---
|
|
143
|
-
|
|
144
|
-
## Pointers
|
|
145
|
-
|
|
146
|
-
- `cometchat-react-calls/references/share-invite.md` — sister
|
|
147
|
-
- `cometchat-flutter-v5-calls` SKILL.md
|
|
148
|
-
- Canonical docs: https://www.cometchat.com/docs/calls/flutter/share-invite
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: cometchat-flutter-v5-conversations
|
|
3
|
-
description: "Use when working with CometChat Flutter UIKit v5 conversation list component. Triggers on CometChatConversations, conversation list, recent chats."
|
|
4
|
-
license: "MIT"
|
|
5
|
-
compatibility: "cometchat_chat_uikit ^5.2.14; cometchat_uikit_shared ^5.2.3"
|
|
6
|
-
metadata:
|
|
7
|
-
author: "CometChat"
|
|
8
|
-
version: "3.0.0"
|
|
9
|
-
tags: "cometchat flutter v5 conversations list recent chats"
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
> **Ground truth:** `cometchat_chat_uikit: ^5.2` (legacy/maintenance-only; calls via raw `cometchat_calls_sdk ^5.0.2`) — pub-cache source + `ui-kit/flutter/v5`. **Official docs:** https://www.cometchat.com/docs/ui-kit/flutter/v5/overview · **Docs MCP:** `claude mcp add --transport http cometchat-docs https://www.cometchat.com/docs/mcp` (or fetch the URL directly without MCP). Verify symbols against the installed package/source before relying on them.
|
|
13
|
-
|
|
14
|
-
# CometChat Flutter UIKit v5 — Conversations
|
|
15
|
-
|
|
16
|
-
The `CometChatConversations` component displays a list of recent conversations.
|
|
17
|
-
|
|
18
|
-
## Key Props
|
|
19
|
-
|
|
20
|
-
| Prop | Type | Default | Description |
|
|
21
|
-
|------|------|---------|-------------|
|
|
22
|
-
| `conversationsRequestBuilder` | `ConversationsRequestBuilder?` | — | Custom fetch builder |
|
|
23
|
-
| `conversationsStyle` | `CometChatConversationsStyle` | `const CometChatConversationsStyle()` | Visual styling |
|
|
24
|
-
| `onItemTap` | `Function(Conversation)?` | — | Tap callback (**no BuildContext**) |
|
|
25
|
-
| `onItemLongPress` | `Function(Conversation)?` | — | Long press callback |
|
|
26
|
-
| `subtitleView` | `Widget? Function(BuildContext, Conversation)?` | — | Custom subtitle |
|
|
27
|
-
| `listItemView` | `Widget Function(Conversation)?` | — | Custom list item (replaces the whole row) |
|
|
28
|
-
| `leadingView` | `Widget? Function(BuildContext, Conversation)?` | — | Custom leading widget (avatar slot) |
|
|
29
|
-
| `titleView` | `Widget? Function(BuildContext, Conversation)?` | — | Custom title widget |
|
|
30
|
-
| `trailingView` | `Widget? Function(Conversation)?` | — | Custom trailing widget (single-arg — asymmetric with the other slots) |
|
|
31
|
-
| `title` | `String?` | — | List title |
|
|
32
|
-
| `showBackButton` | `bool` | `false` | Show back button |
|
|
33
|
-
| `onBack` | `VoidCallback?` | — | Back button callback |
|
|
34
|
-
| `hideAppbar` | `bool?` | `false` | Hide app bar |
|
|
35
|
-
| `appBarOptions` | `List<Widget>?` | — | App bar trailing widgets |
|
|
36
|
-
| `usersStatusVisibility` | `bool?` | `true` | Show online status |
|
|
37
|
-
| `receiptsVisibility` | `bool?` | `true` | Show read receipts |
|
|
38
|
-
| `textFormatters` | `List<CometChatTextFormatter>?` | — | Text formatters for subtitles |
|
|
39
|
-
| `controllerTag` | `String?` | — | Custom GetX controller tag |
|
|
40
|
-
| `hideSearch` | `bool?` | — | Hide search bar |
|
|
41
|
-
| `searchReadOnly` | `bool` | `false` | Read-only search |
|
|
42
|
-
| `onSearchTap` | `GestureTapCallback?` | — | Search tap callback |
|
|
43
|
-
| `deleteConversationOptionVisibility` | `bool?` | `true` | Show delete option |
|
|
44
|
-
| `loadingStateView` | `WidgetBuilder?` | — | Custom loading state |
|
|
45
|
-
| `emptyStateView` | `WidgetBuilder?` | — | Custom empty state |
|
|
46
|
-
| `errorStateView` | `WidgetBuilder?` | — | Custom error state |
|
|
47
|
-
| `setOptions` | `Function?` | — | Replace long-press options |
|
|
48
|
-
| `addOptions` | `Function?` | — | Add to long-press options |
|
|
49
|
-
|
|
50
|
-
## Basic Usage
|
|
51
|
-
|
|
52
|
-
```dart
|
|
53
|
-
CometChatConversations(
|
|
54
|
-
onItemTap: (conversation) {
|
|
55
|
-
User? user;
|
|
56
|
-
Group? group;
|
|
57
|
-
if (conversation.conversationWith is User) {
|
|
58
|
-
user = conversation.conversationWith as User;
|
|
59
|
-
} else {
|
|
60
|
-
group = conversation.conversationWith as Group;
|
|
61
|
-
}
|
|
62
|
-
Navigator.push(context, MaterialPageRoute(
|
|
63
|
-
builder: (_) => MessagesScreen(user: user, group: group),
|
|
64
|
-
));
|
|
65
|
-
},
|
|
66
|
-
)
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
## Custom Request Builder
|
|
70
|
-
|
|
71
|
-
```dart
|
|
72
|
-
CometChatConversations(
|
|
73
|
-
conversationsRequestBuilder: ConversationsRequestBuilder()
|
|
74
|
-
..limit = 30
|
|
75
|
-
..conversationType = ConversationType.user,
|
|
76
|
-
)
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
## Internal Architecture (GetX)
|
|
80
|
-
|
|
81
|
-
The component creates `CometChatConversationsController` via `Get.put()` in `initState()` and deletes it in `dispose()` (unless `controllerTag` is provided externally).
|
|
82
|
-
|
|
83
|
-
Theme values are cached in `didChangeDependencies()` (unconditionally, no flag):
|
|
84
|
-
```dart
|
|
85
|
-
@override
|
|
86
|
-
void didChangeDependencies() {
|
|
87
|
-
typography = CometChatThemeHelper.getTypography(context);
|
|
88
|
-
colorPalette = CometChatThemeHelper.getColorPalette(context);
|
|
89
|
-
spacing = CometChatThemeHelper.getSpacing(context);
|
|
90
|
-
style = CometChatThemeHelper.getTheme<CometChatConversationsStyle>(
|
|
91
|
-
context: context, defaultTheme: CometChatConversationsStyle.of)
|
|
92
|
-
.merge(widget.conversationsStyle);
|
|
93
|
-
super.didChangeDependencies();
|
|
94
|
-
}
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
## Anti-Patterns
|
|
98
|
-
|
|
99
|
-
```dart
|
|
100
|
-
// ❌ WRONG — trying to access controller before component mounts
|
|
101
|
-
final controller = Get.find<CometChatConversationsController>();
|
|
102
|
-
|
|
103
|
-
// ❌ WRONG — manually creating controller outside the widget
|
|
104
|
-
Get.put(CometChatConversationsController(...));
|
|
105
|
-
|
|
106
|
-
// ❌ WRONG — not extracting User/Group from conversation
|
|
107
|
-
onItemTap: (conversation) {
|
|
108
|
-
Navigator.push(context, MaterialPageRoute(
|
|
109
|
-
builder: (_) => MessagesScreen(user: conversation.conversationWith), // Type error
|
|
110
|
-
));
|
|
111
|
-
}
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
## Checklist — Conversations
|
|
115
|
-
|
|
116
|
-
- [ ] `onItemTap` extracts `User`/`Group` from `conversation.conversationWith` with type check
|
|
117
|
-
- [ ] Navigation to messages screen passes extracted `user` or `group`
|
|
118
|
-
- [ ] Let the widget manage its own GetX controller lifecycle
|
|
@@ -1,239 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: cometchat-flutter-v5-core
|
|
3
|
-
description: "Use when writing any code that uses CometChat Flutter UIKit v5 (cometchat_chat_uikit v5.2.14, cometchat_calls_uikit v5.0.15, cometchat_uikit_shared v5.2.3). Contains hard rules that prevent silent failures."
|
|
4
|
-
license: "MIT"
|
|
5
|
-
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"
|
|
6
|
-
metadata:
|
|
7
|
-
author: "CometChat"
|
|
8
|
-
version: "3.0.0"
|
|
9
|
-
tags: "cometchat flutter v5 core rules init login logout lifecycle getx"
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
# CometChat Flutter UIKit v5 — Core Rules
|
|
13
|
-
|
|
14
|
-
> **Ground truth:** `cometchat_chat_uikit: ^5.2` (GetX-based; pair with `cometchat_calls_uikit: ^5.0` / raw `cometchat_calls_sdk ^5.0.2` for calls) — the pub-cache package source + `docs/ui-kit/flutter/v5`. **Official docs:** https://www.cometchat.com/docs/ui-kit/flutter/v5/overview · **Docs MCP:** `claude mcp add --transport http cometchat-docs https://www.cometchat.com/docs/mcp` (or fetch the URL directly without MCP). V5 is legacy/maintenance-only (V6 is current); verify Dart symbols against the resolved package source.
|
|
15
|
-
|
|
16
|
-
Non-negotiable constraints for all CometChat UIKit v5 code. Violating these causes silent failures or crashes.
|
|
17
|
-
|
|
18
|
-
## Key v5 Architecture Facts
|
|
19
|
-
|
|
20
|
-
- State management: **GetX** (GetBuilder, GetxController, Get.put, Get.find, Get.delete)
|
|
21
|
-
- Separate packages: `cometchat_chat_uikit` + `cometchat_calls_uikit` + `cometchat_uikit_shared`
|
|
22
|
-
- SDK: `cometchat_sdk ^4.1.2` + `cometchat_calls_sdk ^4.2.2` (chat-kit baseline). **For voice/video calling, do NOT use `cometchat_calls_uikit` (4.x-bound) — integrate the raw `cometchat_calls_sdk ^5.0.2` per `cometchat-flutter-v5-calls`** (the V5-canonical calls path).
|
|
23
|
-
- **Imports — two barrels.** For chat-only projects: `package:cometchat_chat_uikit/cometchat_chat_uikit.dart`. For projects that also need voice/video calling: ADD `package:cometchat_calls_uikit/cometchat_calls_uikit.dart` as a SECOND import — the calls barrel re-exports shared + SDK only and does NOT re-export `cometchat_chat_uikit`. Chat widgets like `CometChatConversations`, `CometChatMessageList`, `CometChatMessageComposer` are reachable only through the chat barrel.
|
|
24
|
-
- `CometChatUIKit.login(uid)` takes a **String** directly (not an object)
|
|
25
|
-
- No ServiceLocator pattern — controllers are created via `Get.put()` internally
|
|
26
|
-
- Style classes use `ThemeExtension` with `merge()` pattern
|
|
27
|
-
|
|
28
|
-
## Rule: INIT_FIRST
|
|
29
|
-
|
|
30
|
-
`CometChatUIKit.init()` must complete before any login, component usage, or SDK call.
|
|
31
|
-
|
|
32
|
-
```dart
|
|
33
|
-
// ✅ CORRECT
|
|
34
|
-
final settings = (UIKitSettingsBuilder()
|
|
35
|
-
..appId = 'APP_ID'
|
|
36
|
-
..region = 'us'
|
|
37
|
-
..authKey = 'AUTH_KEY'
|
|
38
|
-
..subscriptionType = CometChatSubscriptionType.allUsers)
|
|
39
|
-
.build();
|
|
40
|
-
|
|
41
|
-
CometChatUIKit.init(
|
|
42
|
-
uiKitSettings: settings,
|
|
43
|
-
onSuccess: (_) => debugPrint('Init done'),
|
|
44
|
-
onError: (e) => debugPrint('Init failed: ${e.message}'),
|
|
45
|
-
);
|
|
46
|
-
|
|
47
|
-
// ❌ WRONG — login before init completes
|
|
48
|
-
CometChatUIKit.init(uiKitSettings: settings);
|
|
49
|
-
CometChatUIKit.login('uid'); // Race condition
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
## Rule: AUTH_CHECK_AFTER_INIT
|
|
53
|
-
|
|
54
|
-
After `CometChatUIKit.init()` completes, the static field `CometChatUIKit.loggedInUser` is populated if a cached session exists (init internally calls `getLoggedInUser()`). You can check it synchronously in `onSuccess`, or use `CometChatUIKit.getLoggedInUser()` for an explicit async check.
|
|
55
|
-
|
|
56
|
-
```dart
|
|
57
|
-
// ✅ CORRECT — synchronous check after init
|
|
58
|
-
CometChatUIKit.init(
|
|
59
|
-
uiKitSettings: settings,
|
|
60
|
-
onSuccess: (_) {
|
|
61
|
-
final hasUser = CometChatUIKit.loggedInUser != null;
|
|
62
|
-
// Route to home or login
|
|
63
|
-
},
|
|
64
|
-
);
|
|
65
|
-
|
|
66
|
-
// ✅ ALSO CORRECT — explicit async check (used by master app)
|
|
67
|
-
CometChatUIKit.init(
|
|
68
|
-
uiKitSettings: settings,
|
|
69
|
-
onSuccess: (_) async {
|
|
70
|
-
final user = await CometChatUIKit.getLoggedInUser();
|
|
71
|
-
if (user != null) {
|
|
72
|
-
await CometChatUIKit.login(user.uid, onSuccess: ...);
|
|
73
|
-
}
|
|
74
|
-
},
|
|
75
|
-
);
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
Note: `CometChatUIKit.login()` handles re-login gracefully — if the user is already logged in with the same UID, it returns the cached user without hitting the server.
|
|
79
|
-
|
|
80
|
-
## Rule: LISTENER_LIFECYCLE
|
|
81
|
-
|
|
82
|
-
SDK listeners MUST be registered with a unique ID in `initState()` (or GetxController `onInit()`) and removed in `dispose()` (or `onClose()`).
|
|
83
|
-
|
|
84
|
-
```dart
|
|
85
|
-
// ✅ CORRECT
|
|
86
|
-
class _MyScreenState extends State<MyScreen> with MessageListener {
|
|
87
|
-
late final String _listenerId;
|
|
88
|
-
|
|
89
|
-
@override
|
|
90
|
-
void initState() {
|
|
91
|
-
super.initState();
|
|
92
|
-
_listenerId = 'my_screen_${DateTime.now().millisecondsSinceEpoch}';
|
|
93
|
-
CometChat.addMessageListener(_listenerId, this);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
@override
|
|
97
|
-
void dispose() {
|
|
98
|
-
CometChat.removeMessageListener(_listenerId);
|
|
99
|
-
super.dispose();
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// ❌ WRONG — hardcoded ID causes collisions; missing dispose removal
|
|
104
|
-
CometChat.addMessageListener('messages', this); // Collision!
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
## Rule: THEME_CACHE
|
|
108
|
-
|
|
109
|
-
Cache theme values in `didChangeDependencies()` — unconditionally, no flag needed. Never call `CometChatThemeHelper.getColorPalette(context)` in `build()`.
|
|
110
|
-
|
|
111
|
-
`getColorPalette()` creates a new `CometChatColorPalette` object every call, resolving each token individually via `Theme.of(context)`. During keyboard animation, `MediaQuery` changes trigger rebuilds, making this expensive in `build()`.
|
|
112
|
-
|
|
113
|
-
```dart
|
|
114
|
-
// ✅ CORRECT — matches actual package pattern (no flag)
|
|
115
|
-
@override
|
|
116
|
-
void didChangeDependencies() {
|
|
117
|
-
super.didChangeDependencies();
|
|
118
|
-
colorPalette = CometChatThemeHelper.getColorPalette(context);
|
|
119
|
-
spacing = CometChatThemeHelper.getSpacing(context);
|
|
120
|
-
typography = CometChatThemeHelper.getTypography(context);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
// ❌ WRONG — lookup in build causes jank
|
|
124
|
-
@override
|
|
125
|
-
Widget build(BuildContext context) {
|
|
126
|
-
final colors = CometChatThemeHelper.getColorPalette(context); // Expensive!
|
|
127
|
-
return Container(color: colors.primary);
|
|
128
|
-
}
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
Do NOT use a `_themeInitialized` flag — it prevents theme updates when the system switches between light/dark mode.
|
|
132
|
-
|
|
133
|
-
## Rule: SUBSCRIPTION_TYPE_REQUIRED
|
|
134
|
-
|
|
135
|
-
Omitting `subscriptionType` in `UIKitSettingsBuilder` silently disables all presence events (online/offline, typing indicators). No error is thrown.
|
|
136
|
-
|
|
137
|
-
```dart
|
|
138
|
-
// ✅ CORRECT
|
|
139
|
-
UIKitSettingsBuilder()
|
|
140
|
-
..subscriptionType = CometChatSubscriptionType.allUsers
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
## Rule: REGION_LOWERCASE
|
|
144
|
-
|
|
145
|
-
Region must be a lowercase string: `'us'`, `'eu'`, or `'in'`.
|
|
146
|
-
|
|
147
|
-
## Rule: MUID_PRESERVATION
|
|
148
|
-
|
|
149
|
-
When handling `ccMessageSent` events, compare by `muid` first, then `id` — the SDK may return an empty `muid` in the success callback.
|
|
150
|
-
|
|
151
|
-
## Pattern: Callback → Async Bridge (Completer)
|
|
152
|
-
|
|
153
|
-
```dart
|
|
154
|
-
import 'dart:async';
|
|
155
|
-
|
|
156
|
-
Future<bool> initAsync(UIKitSettings settings) {
|
|
157
|
-
final completer = Completer<bool>();
|
|
158
|
-
CometChatUIKit.init(
|
|
159
|
-
uiKitSettings: settings,
|
|
160
|
-
onSuccess: (_) => completer.complete(true),
|
|
161
|
-
onError: (e) => completer.complete(false),
|
|
162
|
-
);
|
|
163
|
-
return completer.future;
|
|
164
|
-
}
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
## v5 Component Architecture Pattern (GetX)
|
|
168
|
-
|
|
169
|
-
```
|
|
170
|
-
{component}/
|
|
171
|
-
├── cometchat_{component}.dart # StatefulWidget
|
|
172
|
-
├── cometchat_{component}_controller.dart # extends GetxController
|
|
173
|
-
├── cometchat_{component}_style.dart # ThemeExtension with merge()
|
|
174
|
-
└── {component}_builder_protocol.dart # Request builder protocol
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
Internal lifecycle:
|
|
178
|
-
```dart
|
|
179
|
-
@override
|
|
180
|
-
void initState() {
|
|
181
|
-
super.initState();
|
|
182
|
-
tag = widget.controllerTag ?? 'default_tag_${DateTime.now().millisecondsSinceEpoch}';
|
|
183
|
-
controller = Get.put<Controller>(Controller(...), tag: tag);
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
@override
|
|
187
|
-
void dispose() {
|
|
188
|
-
if (widget.controllerTag == null) {
|
|
189
|
-
Get.delete<Controller>(tag: tag);
|
|
190
|
-
}
|
|
191
|
-
super.dispose();
|
|
192
|
-
}
|
|
193
|
-
```
|
|
194
|
-
|
|
195
|
-
## Android Build Requirements
|
|
196
|
-
|
|
197
|
-
- `android.useAndroidX=true` and `android.enableJetifier=true` in `gradle.properties`
|
|
198
|
-
- `minSdk 26` in `android/app/build.gradle`
|
|
199
|
-
- ProGuard: `-keep class com.cometchat.** { *; }` and `-keep interface com.cometchat.** { *; }`
|
|
200
|
-
|
|
201
|
-
## Top 10 Error Debugging
|
|
202
|
-
|
|
203
|
-
| Symptom | Cause | Fix |
|
|
204
|
-
|---------|-------|-----|
|
|
205
|
-
| "Authentication null" | `CometChatUIKit.init()` not called | Call init before login/components |
|
|
206
|
-
| "APP ID null" | appId not set in UIKitSettingsBuilder | Set `..appId = 'YOUR_APP_ID'` |
|
|
207
|
-
| No typing indicators / presence | `subscriptionType` not set | Set `..subscriptionType = CometChatSubscriptionType.allUsers` |
|
|
208
|
-
| Theme jank during keyboard | Theme looked up in `build()` | Cache in `didChangeDependencies()` |
|
|
209
|
-
| Listener leak / duplicate events | Listener not removed in `dispose()` | Always remove with same ID |
|
|
210
|
-
| GetX controller not found | Using `Get.find()` before `Get.put()` | Let UIKit components manage their own controllers |
|
|
211
|
-
| Region error | Uppercase region string | Use lowercase: 'us', 'eu', 'in' |
|
|
212
|
-
| Release build crash | Missing ProGuard keep rules | Add `-keep class com.cometchat.** { *; }` |
|
|
213
|
-
|
|
214
|
-
## Checklist — Every CometChat v5 Screen
|
|
215
|
-
|
|
216
|
-
- [ ] `CometChatUIKit.init()` called before any usage
|
|
217
|
-
- [ ] `subscriptionType` set in UIKitSettingsBuilder
|
|
218
|
-
- [ ] `region` is lowercase
|
|
219
|
-
- [ ] Theme cached in `didChangeDependencies()`, not `build()`
|
|
220
|
-
- [ ] SDK listeners registered with unique ID, removed in `dispose()`
|
|
221
|
-
- [ ] Colors from `CometChatThemeHelper`, never hardcoded
|
|
222
|
-
- [ ] Imports: `package:cometchat_chat_uikit/cometchat_chat_uikit.dart` always; ADD `package:cometchat_calls_uikit/cometchat_calls_uikit.dart` if you use voice/video
|
|
223
|
-
|
|
224
|
-
## Visual Builder integration
|
|
225
|
-
|
|
226
|
-
**Flutter V5 is the primary home for Visual Builder integration.** The canonical repo at the `chat_builder/` directory inside the Flutter Visual Builder ZIP (download from https://preview.cometchat.com/downloads/cometchat-builder-flutter.zip) ships **V5-shaped code** — `cometchat_chat_uikit: ^5.2.12` + `cometchat_calls_uikit: ^5.0.13`. The integration copies the entire `chat_builder/` directory as a `path:` dependency, then `BuilderSettingsHelper.loadFromAsset()` reads `chat_builder/assets/sample_app/cometchat-builder-settings.json` and configures the bundled chat UI accordingly.
|
|
227
|
-
|
|
228
|
-
**The full recipe lives in `cometchat-flutter-v6-core` §"Visual Builder integration"** because that's where the V6-prep restructure originally landed the validated content. Both skills reference the same canonical; the V6 page carries a "V5-shaped code" warning at the top. V5 customers should follow that recipe AS-IS — the canonical IS V5-targeted.
|
|
229
|
-
|
|
230
|
-
Validated 2026-05-21 against Flutter 3.38.3: `flutter build apk --debug` produces `app-debug.apk` after applying:
|
|
231
|
-
- Envelope-wrapped JSON at `chat_builder/assets/sample_app/cometchat-builder-settings.json`. The CLI (source of truth) writes `{ builderId, name, settings: {...} }`; the vendor canonical's own checked-in file carries only `{ builderId, settings }` (no `name`). `BuilderSettingsHelper.loadFromAsset()` reads only `builderId` + `settings` and ignores any extra top-level keys, so the CLI's extra `name` is harmless.
|
|
232
|
-
- Two missing-field defaults injected pre-write (mentionAll + inAppSounds — same as Android)
|
|
233
|
-
- `android.enableJetifier=true` in `android/gradle.properties` (the chat SDK pulls `com.android.support` transitively)
|
|
234
|
-
- `await BuilderSettingsHelper.loadFromAsset()` in `lib/main.dart` before `runApp()`
|
|
235
|
-
- `chat_builder: { path: ./chat_builder }` in host `pubspec.yaml`
|
|
236
|
-
|
|
237
|
-
Differences from the V6 page's recipe text:
|
|
238
|
-
- V5 host code uses `StatefulWidget` with direct listener management (V6 uses BLoC pattern); both work with the embedded chat_builder package since it owns its own state.
|
|
239
|
-
- V5 calls (the standalone `cometchat-flutter-v5-calls` flow, outside the builder) don't need the [[project_v6_flutter_calls_partial]] navigatorKey workaround — that's a V6-specific incoming-call-routing requirement. **However, the Visual Builder canonical itself (V5-shaped) wires `navigatorKey: CallNavigationContext.navigatorKey` UNCONDITIONALLY in every `MaterialApp` `ChatBuilder.createApp()` builds**, regardless of whether calls are enabled — so if you mount `ChatBuilder.createApp()` (recommended) or replicate its `MaterialApp` in a host wrapper, keep that navigator key in place. Do NOT gate it behind "calls enabled". See the v6-core recipe's wrapper guidance.
|