@cometchat/skills 4.4.2 → 5.0.0
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 +36 -0
- package/LICENSE +21 -0
- package/README.md +41 -163
- package/RULES.md +114 -0
- package/bin/cometchat-skills.mjs +1180 -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 +151 -74
- package/peers.yaml +312 -0
- package/registry/README.md +31 -0
- package/registry/android-calls-v5.json +54 -0
- package/registry/android-v6.json +137 -0
- package/registry/angular-v5.json +114 -0
- package/registry/flutter-calls-v5.json +54 -0
- package/registry/flutter-v6.json +119 -0
- package/registry/ios-calls-v5.json +59 -0
- package/registry/ios-v5.json +97 -0
- package/registry/rn-calls-v5.json +59 -0
- package/registry/rn-v5.json +129 -0
- package/registry/sdk-android-v5.json +53 -0
- package/registry/sdk-jsv4.json +53 -0
- package/registry/web-calls-v5.json +54 -0
- package/registry/web-v7.json +99 -0
- package/skills/cometchat/SKILL.md +42 -2096
- 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 +40 -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 +101 -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-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 +131 -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 +58 -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-ios-calls/SKILL.md +112 -563
- package/skills/cometchat-ios-components/SKILL.md +44 -834
- package/skills/cometchat-ios-core/SKILL.md +181 -1068
- package/skills/cometchat-ios-core/references/anti-patterns.md +80 -0
- package/skills/cometchat-ios-core/references/docs-map.md +123 -0
- package/skills/cometchat-ios-core/references/install.md +23 -0
- package/skills/cometchat-ios-core/references/layout.md +186 -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-push/SKILL.md +24 -602
- 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-onboarding/SKILL.md +89 -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 +90 -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 +313 -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 +126 -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 +78 -0
- package/skills/cometchat-react-native-push/SKILL.md +88 -0
- package/skills/cometchat-react-native-sdk/SKILL.md +126 -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 +116 -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/i18n-rtl-a11y.md +22 -0
- package/skills/cometchat-react-v7-core/references/layout.md +158 -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-core/references/troubleshooting.md +28 -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-push/SKILL.md +53 -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 +909 -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 +130 -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-a11y/SKILL.md +0 -477
- 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-i18n/SKILL.md +0 -419
- 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-production/SKILL.md +0 -738
- package/skills/cometchat-ios-testing/SKILL.md +0 -376
- package/skills/cometchat-ios-theming/SKILL.md +0 -667
- package/skills/cometchat-ios-troubleshooting/SKILL.md +0 -1003
- 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,210 +0,0 @@
|
|
|
1
|
-
# CometChat Calls Flutter SDK v4 → v5 migration (raw SDK)
|
|
2
|
-
|
|
3
|
-
Moving the **Calls SDK** from 4.x to **`cometchat_calls_sdk ^5.0.2`** on the Flutter V5 (GetX) chat UI Kit — per the product decision that all families use the V5 calls SDK.
|
|
4
|
-
|
|
5
|
-
**Important:** This migrates the **Calls SDK** (4.x → 5.x), not the chat UI Kit cohort (V5 GetX → V6 Bloc, which is `cometchat-flutter-v6-migration`). The chat UI Kit stays on V5 GetX; only the calls layer changes.
|
|
6
|
-
|
|
7
|
-
> **Why you can't just bump `cometchat_calls_uikit`.** The latest `cometchat_calls_uikit` (5.0.16) still transitively pins `cometchat_calls_sdk ^4.2.2`, and its prebuilt call widgets (`CometChatCallButtons`/`CometChatIncomingCall`/`CometChatOutgoingCall`/`CometChatOngoingCall`) are compiled against the 4.x API. To run the 5.x calls SDK you **drop `cometchat_calls_uikit`** and integrate the **raw `cometchat_calls_sdk ^5.0.2`** directly with a custom call surface.
|
|
8
|
-
|
|
9
|
-
**Substrate of record:** `~/.pub-cache/hosted/pub.dev/cometchat_calls_sdk-5.0.2/lib/`
|
|
10
|
-
**Canonical docs:** https://www.cometchat.com/docs/calls/flutter/migration-guide-v5
|
|
11
|
-
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
## Step 1 — Swap the dependency
|
|
15
|
-
|
|
16
|
-
```diff
|
|
17
|
-
# pubspec.yaml
|
|
18
|
-
dependencies:
|
|
19
|
-
cometchat_chat_uikit: ^5.2.14 # chat UI Kit stays on V5 (GetX)
|
|
20
|
-
- cometchat_calls_uikit: ^5.0.15 # 4.x-bound — remove
|
|
21
|
-
+ cometchat_calls_sdk: ^5.0.2 # raw 5.x calls SDK (direct dependency)
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
```bash
|
|
25
|
-
flutter pub get
|
|
26
|
-
cd ios && pod install # if you have iOS
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
---
|
|
30
|
-
|
|
31
|
-
## Step 2 — Migrate init
|
|
32
|
-
|
|
33
|
-
`init` takes a `CallAppSettings` built via `CallAppSettingBuilder` (`src/builder/call_app_settings_request.dart:36`) and runs with `onSuccess`/`onError` callbacks (`cometchatcalls.dart:172`).
|
|
34
|
-
|
|
35
|
-
```diff
|
|
36
|
-
- final callSettings = CallAppSettingsBuilder()
|
|
37
|
-
- ..setAppId('APP_ID')
|
|
38
|
-
- ..setRegion('REGION');
|
|
39
|
-
- await CometChatCalls.init(callSettings);
|
|
40
|
-
|
|
41
|
-
+ final callAppSettings = (CallAppSettingBuilder()
|
|
42
|
-
+ ..appId = 'APP_ID'
|
|
43
|
-
+ ..region = 'REGION')
|
|
44
|
-
+ .build();
|
|
45
|
-
+ CometChatCalls.init(
|
|
46
|
-
+ callAppSettings,
|
|
47
|
-
+ onSuccess: (String s) {},
|
|
48
|
-
+ onError: (CometChatCallsException e) {},
|
|
49
|
-
+ );
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
---
|
|
53
|
-
|
|
54
|
-
## Step 3 — Add the 5.x Calls SDK login
|
|
55
|
-
|
|
56
|
-
4.x had no calls login (it took a per-call auth token). 5.x has its own login that caches the token internally (`cometchatcalls.dart:316`).
|
|
57
|
-
|
|
58
|
-
```dart
|
|
59
|
-
// After CometChat.login completes:
|
|
60
|
-
final authToken = await CometChat.getUserAuthToken(); // static; no User.getAuthToken() method
|
|
61
|
-
if (authToken != null) {
|
|
62
|
-
CometChatCalls.loginWithAuthToken(
|
|
63
|
-
authToken: authToken,
|
|
64
|
-
onSuccess: (user) {},
|
|
65
|
-
onError: (CometChatCallsException e) {},
|
|
66
|
-
);
|
|
67
|
-
}
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
---
|
|
71
|
-
|
|
72
|
-
## Step 4 — Migrate session settings
|
|
73
|
-
|
|
74
|
-
`SessionSettingsBuilder` replaces `CallSettingsBuilder` (the latter is `@Deprecated`, `src/builder/call_settings.dart:209`). Methods are chainable / cascade setters (`src/builder/session_settings.dart`).
|
|
75
|
-
|
|
76
|
-
```diff
|
|
77
|
-
- final callSettings = (CallSettingsBuilder()
|
|
78
|
-
- ..setSessionType(SessionType.video)
|
|
79
|
-
- ..startWithAudioMuted(false)
|
|
80
|
-
- ..showRecordingButton(true))
|
|
81
|
-
- .build();
|
|
82
|
-
|
|
83
|
-
+ final sessionSettings = (SessionSettingsBuilder()
|
|
84
|
-
+ ..setType(SessionType.video) // session_settings.dart:197
|
|
85
|
-
+ ..startAudioMuted(false) // :173
|
|
86
|
-
+ ..startVideoPaused(false) // :167
|
|
87
|
-
+ ..setLayout(LayoutType.tile) // :179
|
|
88
|
-
+ ..hideRecordingButton(false)) // :227 (INVERTED sense vs show*)
|
|
89
|
-
+ .build();
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
---
|
|
93
|
-
|
|
94
|
-
## Step 5 — Migrate the listener to the 5 split listeners
|
|
95
|
-
|
|
96
|
-
The single `CometChatCallsEventsListener` is `@Deprecated` (`src/listener/cometchat_calls_events_listener.dart:16`). 5.x splits events across `SessionStatusListeners`, `ParticipantEventListeners`, `MediaEventListeners`, `ButtonClickListeners`, `LayoutListeners` — registered on `CallSession.getInstance()` (after `joinSession.onSuccess`).
|
|
97
|
-
|
|
98
|
-
```diff
|
|
99
|
-
- class MyEvents implements CometChatCallsEventsListener {
|
|
100
|
-
- @override
|
|
101
|
-
- void onCallEnded() { /* ... */ }
|
|
102
|
-
- @override
|
|
103
|
-
- void onUserJoined(RTCUser user) { /* ... */ }
|
|
104
|
-
- // ...
|
|
105
|
-
- }
|
|
106
|
-
- CometChatCalls.addCallsEventListeners('id', MyEvents());
|
|
107
|
-
|
|
108
|
-
+ class MyEvents implements SessionStatusListeners, ParticipantEventListeners {
|
|
109
|
-
+ @override
|
|
110
|
-
+ void onSessionLeft() { /* was onCallEnded */ } // session_status_listeners.dart:10
|
|
111
|
-
+ @override
|
|
112
|
-
+ void onParticipantJoined(Participant p) { /* was onUserJoined */ } // participant_event_listeners.dart:12
|
|
113
|
-
+ @override
|
|
114
|
-
+ void onParticipantLeft(Participant p) { /* was onUserLeft */ } // :15
|
|
115
|
-
+ // ... remaining interface methods (no-ops or pass-through)
|
|
116
|
-
+ }
|
|
117
|
-
+
|
|
118
|
-
+ // inside joinSession.onSuccess:
|
|
119
|
-
+ final events = MyEvents();
|
|
120
|
-
+ CallSession.getInstance()?.addSessionStatusListener(events); // call_session.dart:66
|
|
121
|
-
+ CallSession.getInstance()?.addParticipantEventListener(events); // :74
|
|
122
|
-
+
|
|
123
|
-
+ @override
|
|
124
|
-
+ void dispose() {
|
|
125
|
-
+ CallSession.getInstance()?.removeSessionStatusListener(events);
|
|
126
|
-
+ CallSession.getInstance()?.removeParticipantEventListener(events);
|
|
127
|
-
+ super.dispose();
|
|
128
|
-
+ }
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
---
|
|
132
|
-
|
|
133
|
-
## Step 6 — Start/join + control method renames + receiver shift
|
|
134
|
-
|
|
135
|
-
The two-step `generateToken` + `startSession` collapses into a single `joinSession` (`cometchatcalls.dart:735`). In-call controls move from static methods on `CometChatCalls` to **instance methods on `CallSession`** (the singleton via `CallSession.getInstance()`).
|
|
136
|
-
|
|
137
|
-
```diff
|
|
138
|
-
// start the session
|
|
139
|
-
- CometChatCalls.generateToken(sessionId, authToken, onSuccess: (t) {
|
|
140
|
-
- CometChatCalls.startSession(t.token!, callSettings, onSuccess: (w) {}, onError: (e) {});
|
|
141
|
-
- }, onError: (e) {});
|
|
142
|
-
+ CometChatCalls.joinSession(
|
|
143
|
-
+ sessionId: sessionId, // SDK mints the call token internally
|
|
144
|
-
+ sessionSettings: sessionSettings,
|
|
145
|
-
+ onSuccess: (Widget? w) {},
|
|
146
|
-
+ onError: (CometChatCallsException e) {},
|
|
147
|
-
+ );
|
|
148
|
-
|
|
149
|
-
// teardown — receiver changes from CometChatCalls (static) to CallSession (singleton)
|
|
150
|
-
- CometChatCalls.endSession(onSuccess: (_) {}, onError: (e) {})
|
|
151
|
-
+ await CallSession.getInstance()?.leaveSession() // call_session.dart:272
|
|
152
|
-
|
|
153
|
-
// media controls — same receiver shift, now no-arg
|
|
154
|
-
- CometChatCalls.muteAudio()
|
|
155
|
-
+ CallSession.getInstance()?.muteAudio() // call_session.dart:131
|
|
156
|
-
+ CallSession.getInstance()?.unMuteAudio() // :145
|
|
157
|
-
- CometChatCalls.pauseVideo() / resumeVideo()
|
|
158
|
-
+ CallSession.getInstance()?.pauseVideo() / resumeVideo() // :168 / :182
|
|
159
|
-
|
|
160
|
-
// layout — also moves to the instance (NOT static in 5.x)
|
|
161
|
-
- CometChatCalls.setLayout(CallLayout.spotlight)
|
|
162
|
-
+ CallSession.getInstance()?.setLayout(LayoutType.spotlight) // :394
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
**`CallSession.getInstance()` returns `CallSession?` (nullable)** — null when there's no active session. Use `?.` to safely chain.
|
|
166
|
-
|
|
167
|
-
---
|
|
168
|
-
|
|
169
|
-
## Step 7 — GetX state preservation
|
|
170
|
-
|
|
171
|
-
If you use GetX controllers around the calls (per `cometchat-flutter-v5-calls/SKILL.md`), the state shape doesn't change — only the underlying SDK calls. Sample diff in a GetX controller:
|
|
172
|
-
|
|
173
|
-
```diff
|
|
174
|
-
class CallController extends GetxController {
|
|
175
|
-
void startCall(String sessionId) async {
|
|
176
|
-
- await CometChatCalls.startSession(callToken, settings: callSettings);
|
|
177
|
-
+ CometChatCalls.joinSession(sessionId: sessionId, sessionSettings: sessionSettings,
|
|
178
|
-
+ onSuccess: (w) {}, onError: (e) {});
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
void endCall() async {
|
|
182
|
-
- CometChatCalls.endSession();
|
|
183
|
-
+ await CallSession.getInstance()?.leaveSession();
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
---
|
|
189
|
-
|
|
190
|
-
## Verification checklist
|
|
191
|
-
|
|
192
|
-
- [ ] `pubspec.yaml` lists `cometchat_calls_sdk: ^5.0.2` and NO `cometchat_calls_uikit`
|
|
193
|
-
- [ ] `flutter pub get` + `pod install` succeed
|
|
194
|
-
- [ ] `CometChatCalls.loginWithAuthToken(authToken:)` called after `CometChat.login`
|
|
195
|
-
- [ ] `CallSettingsBuilder` replaced with `SessionSettingsBuilder`
|
|
196
|
-
- [ ] Single `CometChatCallsEventsListener` replaced with the 5 split listeners on `CallSession.getInstance()`
|
|
197
|
-
- [ ] `generateToken` + `startSession` collapsed into `joinSession(sessionId:, sessionSettings:, ...)`
|
|
198
|
-
- [ ] In-call controls + `leaveSession` moved to `CallSession.getInstance()?.X()`
|
|
199
|
-
- [ ] Prebuilt `cometchat_calls_uikit` call widgets removed; custom call surface in place
|
|
200
|
-
- [ ] Real-device smoke: iOS + Android, incoming/outgoing/mute/layout/leave
|
|
201
|
-
|
|
202
|
-
---
|
|
203
|
-
|
|
204
|
-
## Pointers
|
|
205
|
-
|
|
206
|
-
- Canonical migration: https://www.cometchat.com/docs/calls/flutter/migration-guide-v5
|
|
207
|
-
- `cometchat-flutter-v5-calls/SKILL.md` — Flutter calls architecture on the 5.x SDK (GetX patterns)
|
|
208
|
-
- `cometchat-flutter-v5-calls/references/call-session.md` — canonical 5.x SDK API surface
|
|
209
|
-
- `cometchat-flutter-v6-calls/` — V6 cohort (Bloc) on the SAME 5.0.2 calls SDK
|
|
210
|
-
```
|
|
@@ -1,255 +0,0 @@
|
|
|
1
|
-
# Raise hand on Flutter (UIKit V5, GetX-based)
|
|
2
|
-
|
|
3
|
-
Same SDK conceptual API as web/native. Flutter V5 uses GetX for state management — the canonical pattern is a `GetxController` that wraps the call event listener and publishes raised-hand state via `Rx<List<RaisedParticipant>>`.
|
|
4
|
-
|
|
5
|
-
**Canonical docs:** https://www.cometchat.com/docs/calls/flutter/raise-hand
|
|
6
|
-
**Read first:** `cometchat-react-calls/references/raise-hand.md` — UX shape + anti-patterns are identical; this is the V5 GetX-specific wiring.
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## SDK API
|
|
11
|
-
|
|
12
|
-
Raise/lower hand are **instance methods on the `CallSession` singleton**, NOT static on `CometChatCalls` (`cometchat_calls_sdk-5.0.2` `src/call_session.dart:292,306`). Participant hand events arrive via `ParticipantEventListeners`, registered through `CallSession.getInstance()?.addParticipantEventListener(...)` (`src/call_session.dart:74`).
|
|
13
|
-
|
|
14
|
-
```dart
|
|
15
|
-
import 'package:cometchat_calls_sdk/cometchat_calls_sdk.dart';
|
|
16
|
-
|
|
17
|
-
// Local user
|
|
18
|
-
CallSession.getInstance()?.raiseHand(); // call_session.dart:292
|
|
19
|
-
CallSession.getInstance()?.lowerHand(); // call_session.dart:306
|
|
20
|
-
|
|
21
|
-
// Listener — implement the split ParticipantEventListeners interface
|
|
22
|
-
class HandListener implements ParticipantEventListeners {
|
|
23
|
-
@override
|
|
24
|
-
void onParticipantHandRaised(Participant participant) { // participant_event_listeners.dart:30
|
|
25
|
-
// participant.uid, participant.name (both nullable)
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
@override
|
|
29
|
-
void onParticipantHandLowered(Participant participant) { // :33
|
|
30
|
-
// ...
|
|
31
|
-
}
|
|
32
|
-
// ... other ParticipantEventListeners methods (no-ops or pass-through)
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
// Register on the session singleton (inside joinSession.onSuccess):
|
|
36
|
-
CallSession.getInstance()?.addParticipantEventListener(HandListener()); // :74
|
|
37
|
-
|
|
38
|
-
// Settings flag — method on the (non-deprecated) SessionSettingsBuilder.
|
|
39
|
-
final settings = (SessionSettingsBuilder()
|
|
40
|
-
..hideRaiseHandButton(true)) // session_settings.dart:215
|
|
41
|
-
.build();
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
---
|
|
45
|
-
|
|
46
|
-
## GetX controller
|
|
47
|
-
|
|
48
|
-
```dart
|
|
49
|
-
import 'package:get/get.dart';
|
|
50
|
-
import 'package:cometchat_calls_sdk/cometchat_calls_sdk.dart';
|
|
51
|
-
|
|
52
|
-
class RaisedParticipant {
|
|
53
|
-
final String uid;
|
|
54
|
-
final String name;
|
|
55
|
-
final DateTime raisedAt;
|
|
56
|
-
RaisedParticipant({required this.uid, required this.name, required this.raisedAt});
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
class RaiseHandController extends GetxController implements ParticipantEventListeners {
|
|
60
|
-
final localRaised = false.obs;
|
|
61
|
-
final raised = <RaisedParticipant>[].obs;
|
|
62
|
-
|
|
63
|
-
void toggle() {
|
|
64
|
-
if (localRaised.value) {
|
|
65
|
-
CallSession.getInstance()?.lowerHand();
|
|
66
|
-
} else {
|
|
67
|
-
CallSession.getInstance()?.raiseHand();
|
|
68
|
-
}
|
|
69
|
-
localRaised.value = !localRaised.value;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
@override
|
|
73
|
-
void onParticipantHandRaised(Participant p) {
|
|
74
|
-
// Participant.uid / .name are nullable in 5.x.
|
|
75
|
-
final uid = p.uid ?? '';
|
|
76
|
-
final entry = RaisedParticipant(
|
|
77
|
-
uid: uid, name: p.name ?? uid, raisedAt: DateTime.now(),
|
|
78
|
-
);
|
|
79
|
-
raised.removeWhere((r) => r.uid == uid);
|
|
80
|
-
raised.add(entry);
|
|
81
|
-
raised.sort((a, b) => a.raisedAt.compareTo(b.raisedAt));
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
@override
|
|
85
|
-
void onParticipantHandLowered(Participant p) {
|
|
86
|
-
raised.removeWhere((r) => r.uid == (p.uid ?? ''));
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// ... implement other ParticipantEventListeners methods (no-ops or pass-through)
|
|
90
|
-
}
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
`.obs` is GetX's reactive marker. UI rebuilds automatically when these mutate.
|
|
94
|
-
|
|
95
|
-
---
|
|
96
|
-
|
|
97
|
-
## Toggle button widget
|
|
98
|
-
|
|
99
|
-
```dart
|
|
100
|
-
class RaiseHandButton extends StatelessWidget {
|
|
101
|
-
const RaiseHandButton({super.key});
|
|
102
|
-
|
|
103
|
-
@override
|
|
104
|
-
Widget build(BuildContext context) {
|
|
105
|
-
final ctrl = Get.find<RaiseHandController>();
|
|
106
|
-
return Obx(() => GestureDetector(
|
|
107
|
-
onTap: () {
|
|
108
|
-
ctrl.toggle();
|
|
109
|
-
// Announce for screen readers
|
|
110
|
-
SemanticsService.announce(
|
|
111
|
-
ctrl.localRaised.value ? 'Hand raised' : 'Hand lowered',
|
|
112
|
-
TextDirection.ltr,
|
|
113
|
-
);
|
|
114
|
-
},
|
|
115
|
-
child: Semantics(
|
|
116
|
-
button: true,
|
|
117
|
-
selected: ctrl.localRaised.value,
|
|
118
|
-
label: ctrl.localRaised.value ? 'Lower hand' : 'Raise hand',
|
|
119
|
-
child: Container(
|
|
120
|
-
padding: const EdgeInsets.all(12),
|
|
121
|
-
decoration: BoxDecoration(
|
|
122
|
-
color: ctrl.localRaised.value
|
|
123
|
-
? const Color(0xFFFFD60A)
|
|
124
|
-
: Colors.white24,
|
|
125
|
-
borderRadius: BorderRadius.circular(32),
|
|
126
|
-
),
|
|
127
|
-
child: Row(
|
|
128
|
-
children: [
|
|
129
|
-
const Text('✋'),
|
|
130
|
-
const SizedBox(width: 4),
|
|
131
|
-
Text(ctrl.localRaised.value ? 'Lower' : 'Raise'),
|
|
132
|
-
],
|
|
133
|
-
),
|
|
134
|
-
),
|
|
135
|
-
),
|
|
136
|
-
));
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
`SemanticsService.announce` is the Flutter equivalent of `aria-live` / `UIAccessibility.post(.announcement, ...)` — TalkBack and VoiceOver pick up the announcement.
|
|
142
|
-
|
|
143
|
-
`Semantics` wrapper sets `button: true`, `selected:`, `label:` — these map to platform a11y conventions.
|
|
144
|
-
|
|
145
|
-
---
|
|
146
|
-
|
|
147
|
-
## Raised-hands sheet (DraggableScrollableSheet)
|
|
148
|
-
|
|
149
|
-
```dart
|
|
150
|
-
class RaisedHandsSheet extends StatelessWidget {
|
|
151
|
-
const RaisedHandsSheet({super.key});
|
|
152
|
-
|
|
153
|
-
@override
|
|
154
|
-
Widget build(BuildContext context) {
|
|
155
|
-
final ctrl = Get.find<RaiseHandController>();
|
|
156
|
-
return DraggableScrollableSheet(
|
|
157
|
-
initialChildSize: 0.1,
|
|
158
|
-
minChildSize: 0.1,
|
|
159
|
-
maxChildSize: 0.5,
|
|
160
|
-
builder: (context, scrollController) => Container(
|
|
161
|
-
decoration: const BoxDecoration(
|
|
162
|
-
color: Colors.white,
|
|
163
|
-
borderRadius: BorderRadius.vertical(top: Radius.circular(16)),
|
|
164
|
-
),
|
|
165
|
-
child: Obx(() => ListView(
|
|
166
|
-
controller: scrollController,
|
|
167
|
-
padding: const EdgeInsets.all(16),
|
|
168
|
-
children: [
|
|
169
|
-
Text(
|
|
170
|
-
'Raised hands (${ctrl.raised.length})',
|
|
171
|
-
style: const TextStyle(fontWeight: FontWeight.w600),
|
|
172
|
-
),
|
|
173
|
-
const SizedBox(height: 8),
|
|
174
|
-
for (final p in ctrl.raised)
|
|
175
|
-
ListTile(
|
|
176
|
-
leading: const Text('✋', style: TextStyle(fontSize: 20)),
|
|
177
|
-
title: Text(p.name),
|
|
178
|
-
trailing: Text(
|
|
179
|
-
'${DateTime.now().difference(p.raisedAt).inSeconds}s ago',
|
|
180
|
-
style: const TextStyle(color: Colors.grey),
|
|
181
|
-
),
|
|
182
|
-
),
|
|
183
|
-
],
|
|
184
|
-
)),
|
|
185
|
-
),
|
|
186
|
-
);
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
---
|
|
192
|
-
|
|
193
|
-
## Wiring to the call session
|
|
194
|
-
|
|
195
|
-
```dart
|
|
196
|
-
RaiseHandController? _handCtrl;
|
|
197
|
-
|
|
198
|
-
@override
|
|
199
|
-
void initState() {
|
|
200
|
-
super.initState();
|
|
201
|
-
_handCtrl = Get.put(RaiseHandController());
|
|
202
|
-
// NOTE: attach the listener inside joinSession.onSuccess (CallSession.getInstance()
|
|
203
|
-
// is null until the session exists). If this widget is mounted only after the
|
|
204
|
-
// session is live, attach here:
|
|
205
|
-
CallSession.getInstance()?.addParticipantEventListener(_handCtrl!); // call_session.dart:74
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
@override
|
|
209
|
-
void dispose() {
|
|
210
|
-
if (_handCtrl != null) {
|
|
211
|
-
CallSession.getInstance()?.removeParticipantEventListener(_handCtrl!); // call_session.dart:78
|
|
212
|
-
}
|
|
213
|
-
Get.delete<RaiseHandController>();
|
|
214
|
-
super.dispose();
|
|
215
|
-
}
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
The 5.x SDK identifies listeners by object identity (a `Set`), not a string ID — keep the same controller instance you registered and pass it to `removeParticipantEventListener` on dispose.
|
|
219
|
-
|
|
220
|
-
---
|
|
221
|
-
|
|
222
|
-
## Anti-patterns
|
|
223
|
-
|
|
224
|
-
Web sister reference rules apply, plus Flutter V5-specific:
|
|
225
|
-
|
|
226
|
-
1. **Forgetting `Get.delete<RaiseHandController>()` on dispose.** GetX retains the controller across navigation — listeners survive past the call view, fire stale events.
|
|
227
|
-
2. **`Get.put(RaiseHandController(), permanent: true)` for the call.** Lifetime is too long; controller survives logout. Use scoped `Get.put` without permanent.
|
|
228
|
-
3. **Skipping `Semantics` wrapper on the button.** TalkBack reads the GestureDetector as untyped — bad a11y.
|
|
229
|
-
4. **`Obx` rebuilding the entire widget tree** when only one `.obs` field changes. Wrap minimally — the `Obx` should hug only the reactive part.
|
|
230
|
-
5. **DraggableScrollableSheet without `initialChildSize` < `minChildSize`** — sheet pops above the screen on render, looks broken.
|
|
231
|
-
|
|
232
|
-
---
|
|
233
|
-
|
|
234
|
-
## Verification checklist
|
|
235
|
-
|
|
236
|
-
- [ ] `RaiseHandController` is a `GetxController`
|
|
237
|
-
- [ ] `localRaised` and `raised` are `.obs` reactive
|
|
238
|
-
- [ ] `Obx` wraps only reactive parts of the UI
|
|
239
|
-
- [ ] `Semantics` wrapper on toggle button with `button: true, selected:, label:`
|
|
240
|
-
- [ ] `SemanticsService.announce` on toggle
|
|
241
|
-
- [ ] Same controller instance registered via `CallSession.getInstance()?.addParticipantEventListener(ctrl)` and removed via `removeParticipantEventListener(ctrl)` on dispose
|
|
242
|
-
- [ ] `Get.delete<RaiseHandController>()` in `dispose()`
|
|
243
|
-
- [ ] `SessionSettingsBuilder()..hideRaiseHandButton(true)` if custom UI
|
|
244
|
-
- [ ] Real-device smoke: 3 devices (mix of iOS + Android), raise from 2 → host sees both
|
|
245
|
-
- [ ] TalkBack / VoiceOver announces "Hand raised" / "Hand lowered" on toggle
|
|
246
|
-
|
|
247
|
-
---
|
|
248
|
-
|
|
249
|
-
## Pointers
|
|
250
|
-
|
|
251
|
-
- `cometchat-react-calls/references/raise-hand.md` — sister reference (UX shape)
|
|
252
|
-
- `cometchat-flutter-v5-calls` SKILL.md — V5 hard rules + GetX scope rules
|
|
253
|
-
- `cometchat-flutter-v6-calls/references/raise-hand.md` — V6 sibling (Bloc-based — different state shape)
|
|
254
|
-
- `cometchat-a11y` — Flutter Semantics + SemanticsService
|
|
255
|
-
- Canonical docs: https://www.cometchat.com/docs/calls/flutter/raise-hand
|
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
# Ringing — call signaling with custom UI (Flutter V5 / GetX)
|
|
2
|
-
|
|
3
|
-
Same SDK shape as web/RN. Flutter-specific deltas: GetX-controlled state, flutter_callkit_incoming for OS-level backgrounded UI, just_audio for foreground ringtone.
|
|
4
|
-
|
|
5
|
-
**Read first:** `cometchat-react-calls/references/ringing-integration.md` — full architecture, hard rules.
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## SDK API + GetX controller
|
|
10
|
-
|
|
11
|
-
```dart
|
|
12
|
-
import 'package:cometchat_chat_uikit/cometchat_chat_uikit.dart';
|
|
13
|
-
import 'package:cometchat_sdk/cometchat_sdk.dart'; // Call, CallListener (Chat SDK signaling)
|
|
14
|
-
|
|
15
|
-
class CallSignalingController extends GetxController implements CallListener {
|
|
16
|
-
final incoming = Rx<Call?>(null);
|
|
17
|
-
final outgoing = Rx<Call?>(null);
|
|
18
|
-
final activeSessionId = Rx<String?>(null);
|
|
19
|
-
|
|
20
|
-
static const _listenerId = 'app';
|
|
21
|
-
|
|
22
|
-
@override
|
|
23
|
-
void onInit() {
|
|
24
|
-
super.onInit();
|
|
25
|
-
CometChat.addCallListener(_listenerId, this);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
@override
|
|
29
|
-
void onIncomingCallReceived(Call call) {
|
|
30
|
-
incoming.value = call;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
@override
|
|
34
|
-
void onOutgoingCallAccepted(Call call) {
|
|
35
|
-
outgoing.value = null;
|
|
36
|
-
activeSessionId.value = call.sessionId;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
@override
|
|
40
|
-
void onOutgoingCallRejected(Call call) {
|
|
41
|
-
outgoing.value = null;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
@override
|
|
45
|
-
void onIncomingCallCancelled(Call call) {
|
|
46
|
-
incoming.value = null;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
@override
|
|
50
|
-
void onCallEndedMessageReceived(Call call) {
|
|
51
|
-
incoming.value = null;
|
|
52
|
-
outgoing.value = null;
|
|
53
|
-
activeSessionId.value = null;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
Future<void> initiate(String receiverUid, {String type = 'video'}) async {
|
|
57
|
-
final call = Call(
|
|
58
|
-
receiverUid: receiverUid,
|
|
59
|
-
type: type == 'video' ? CometChatCallType.video : CometChatCallType.audio, // ctor param is `type`, not `callType`
|
|
60
|
-
receiverType: CometChatReceiverType.user,
|
|
61
|
-
);
|
|
62
|
-
// initiateCall is void + callback: the Call comes back in onSuccess, not via await.
|
|
63
|
-
CometChat.initiateCall(call,
|
|
64
|
-
onSuccess: (Call result) => outgoing.value = result,
|
|
65
|
-
onError: (CometChatException e) => debugPrint(e.message ?? ''));
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
Future<void> accept(Call call) async {
|
|
69
|
-
// acceptCall takes the sessionID POSITIONALLY + onSuccess/onError; it returns void.
|
|
70
|
-
CometChat.acceptCall(call.sessionId!,
|
|
71
|
-
onSuccess: (Call result) {
|
|
72
|
-
incoming.value = null;
|
|
73
|
-
activeSessionId.value = result.sessionId;
|
|
74
|
-
},
|
|
75
|
-
onError: (CometChatException e) => debugPrint(e.message ?? ''));
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
Future<void> reject(Call call) async {
|
|
79
|
-
// rejectCall: positional sessionID + status String + onSuccess/onError (void).
|
|
80
|
-
CometChat.rejectCall(call.sessionId!, CometChatCallStatus.rejected,
|
|
81
|
-
onSuccess: (Call result) => incoming.value = null,
|
|
82
|
-
onError: (CometChatException e) => debugPrint(e.message ?? ''));
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
@override
|
|
86
|
-
void onClose() {
|
|
87
|
-
CometChat.removeCallListener(_listenerId);
|
|
88
|
-
super.onClose();
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
Initialize at app start via `Get.put(CallSignalingController(), permanent: true);` so the listener survives navigation.
|
|
94
|
-
|
|
95
|
-
---
|
|
96
|
-
|
|
97
|
-
## Incoming-call overlay
|
|
98
|
-
|
|
99
|
-
```dart
|
|
100
|
-
class IncomingCallOverlay extends StatelessWidget {
|
|
101
|
-
const IncomingCallOverlay({super.key});
|
|
102
|
-
|
|
103
|
-
@override
|
|
104
|
-
Widget build(BuildContext context) {
|
|
105
|
-
final ctrl = Get.find<CallSignalingController>();
|
|
106
|
-
|
|
107
|
-
return Obx(() {
|
|
108
|
-
final call = ctrl.incoming.value;
|
|
109
|
-
if (call == null) return const SizedBox.shrink();
|
|
110
|
-
|
|
111
|
-
return Material(
|
|
112
|
-
color: Colors.black.withOpacity(0.85),
|
|
113
|
-
child: Center(
|
|
114
|
-
child: Column(
|
|
115
|
-
mainAxisSize: MainAxisSize.min,
|
|
116
|
-
children: [
|
|
117
|
-
CircleAvatar(
|
|
118
|
-
radius: 60,
|
|
119
|
-
backgroundImage: NetworkImage(call.callInitiator?.avatar ?? ''),
|
|
120
|
-
),
|
|
121
|
-
const SizedBox(height: 16),
|
|
122
|
-
Text(
|
|
123
|
-
call.callInitiator?.name ?? 'Unknown',
|
|
124
|
-
style: const TextStyle(color: Colors.white, fontSize: 24),
|
|
125
|
-
),
|
|
126
|
-
Text('Incoming ${call.type} call', style: const TextStyle(color: Colors.white70)),
|
|
127
|
-
const SizedBox(height: 32),
|
|
128
|
-
Row(
|
|
129
|
-
mainAxisAlignment: MainAxisAlignment.center,
|
|
130
|
-
children: [
|
|
131
|
-
Semantics(
|
|
132
|
-
label: 'Decline call',
|
|
133
|
-
button: true,
|
|
134
|
-
child: FloatingActionButton(
|
|
135
|
-
backgroundColor: Colors.red,
|
|
136
|
-
onPressed: () => ctrl.reject(call),
|
|
137
|
-
child: const Icon(Icons.call_end),
|
|
138
|
-
),
|
|
139
|
-
),
|
|
140
|
-
const SizedBox(width: 32),
|
|
141
|
-
Semantics(
|
|
142
|
-
label: 'Accept call',
|
|
143
|
-
button: true,
|
|
144
|
-
child: FloatingActionButton(
|
|
145
|
-
backgroundColor: Colors.green,
|
|
146
|
-
onPressed: () => ctrl.accept(call),
|
|
147
|
-
child: const Icon(Icons.call),
|
|
148
|
-
),
|
|
149
|
-
),
|
|
150
|
-
],
|
|
151
|
-
),
|
|
152
|
-
],
|
|
153
|
-
),
|
|
154
|
-
),
|
|
155
|
-
);
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
Wrap above the navigator (typically in `MaterialApp.builder` or as a sibling Stack item) so it surfaces over any route.
|
|
162
|
-
|
|
163
|
-
---
|
|
164
|
-
|
|
165
|
-
## Backgrounded ring — flutter_callkit_incoming + push (mandatory)
|
|
166
|
-
|
|
167
|
-
GetX listeners only fire while the app is alive. For backgrounded/killed ring, server fires push (APNs PushKit on iOS, FCM data-message on Android) → `flutter_callkit_incoming` shows OS-level UI. See `cometchat-flutter-v5-calls/references/server-push-bridge.md`.
|
|
168
|
-
|
|
169
|
-
---
|
|
170
|
-
|
|
171
|
-
## Anti-patterns
|
|
172
|
-
|
|
173
|
-
Web sister rules apply, plus Flutter-specific:
|
|
174
|
-
|
|
175
|
-
1. **`Get.put` without `permanent: true`.** Controller disposed on route change → listener gone → backgrounded calls miss.
|
|
176
|
-
2. **`StatefulWidget` with `setState` instead of `Obx`.** Rx values won't trigger rebuild without `Obx` wrapper.
|
|
177
|
-
3. **JS-style ringtone via `audioplayers` during a CallKit ring.** Both play at once.
|
|
178
|
-
|
|
179
|
-
---
|
|
180
|
-
|
|
181
|
-
## Verification checklist
|
|
182
|
-
|
|
183
|
-
- [ ] `Get.put(CallSignalingController(), permanent: true)` at app start
|
|
184
|
-
- [ ] `IncomingCallOverlay` mounted in `MaterialApp.builder`
|
|
185
|
-
- [ ] `removeCallListener` in `onClose`
|
|
186
|
-
- [ ] `flutter_callkit_incoming` wired for backgrounded ring
|
|
187
|
-
- [ ] Real-device smoke (iOS + Android): foreground, backgrounded, killed ring all surface UI
|
|
188
|
-
|
|
189
|
-
---
|
|
190
|
-
|
|
191
|
-
## Pointers
|
|
192
|
-
|
|
193
|
-
- `cometchat-react-calls/references/ringing-integration.md` — canonical
|
|
194
|
-
- `cometchat-flutter-v5-calls/SKILL.md` — Flutter calls architecture
|
|
195
|
-
- `cometchat-flutter-v5-calls/references/server-push-bridge.md` — backgrounded ring
|
|
196
|
-
- Canonical docs: https://www.cometchat.com/docs/calls/flutter/ringing
|