@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,88 +0,0 @@
|
|
|
1
|
-
# Idle timeout on Flutter V6 (Bloc-based)
|
|
2
|
-
|
|
3
|
-
Same SDK API as V5; Bloc-based wiring. Read `cometchat-flutter-v5-calls/references/idle-timeout.md` first.
|
|
4
|
-
|
|
5
|
-
**Canonical docs:** https://www.cometchat.com/docs/calls/flutter/idle-timeout
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## SDK API + listener bridge
|
|
10
|
-
|
|
11
|
-
Set the idle period on `SessionSettingsBuilder().setIdleTimeoutPeriod(int)` (seconds — `cometchat_calls_sdk-5.0.2` `src/builder/session_settings.dart:185`). The monolithic `CometChatCallsEventsListener` is `@Deprecated` in 5.0.2 (`src/listener/cometchat_calls_events_listener.dart:16`) — use the v5 split listeners instead. `onSessionTimedOut()` lives on `SessionStatusListeners` (`src/listener/session_status_listeners.dart`), registered via `CallSession.getInstance()?.addSessionStatusListener(...)` (`src/call_session.dart:66`). There is no `CometChatCalls.addCallEventListener`.
|
|
12
|
-
|
|
13
|
-
Listener via Bloc bridge (cf. `cometchat-flutter-v6-calls/references/raise-hand.md`):
|
|
14
|
-
|
|
15
|
-
```dart
|
|
16
|
-
// Apply the idle timeout when building session settings:
|
|
17
|
-
final settings = SessionSettingsBuilder().setIdleTimeoutPeriod(180).build();
|
|
18
|
-
|
|
19
|
-
abstract class CallEvent {}
|
|
20
|
-
class _SessionTimedOut extends CallEvent {}
|
|
21
|
-
|
|
22
|
-
class CallBloc extends Bloc<CallEvent, CallState> implements SessionStatusListeners {
|
|
23
|
-
CallBloc() : super(const CallState()) {
|
|
24
|
-
on<_SessionTimedOut>(_onTimedOut);
|
|
25
|
-
CallSession.getInstance()?.addSessionStatusListener(this);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
@override
|
|
29
|
-
void onSessionTimedOut() {
|
|
30
|
-
add(_SessionTimedOut());
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
void _onTimedOut(_SessionTimedOut event, Emitter<CallState> emit) {
|
|
34
|
-
emit(state.copyWith(timedOut: true));
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// ... other SessionStatusListeners callbacks (onSessionJoined/onSessionLeft/...) as no-ops
|
|
38
|
-
|
|
39
|
-
@override
|
|
40
|
-
Future<void> close() {
|
|
41
|
-
CallSession.getInstance()?.removeSessionStatusListener(this);
|
|
42
|
-
return super.close();
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
UI listens for `state.timedOut`:
|
|
48
|
-
|
|
49
|
-
```dart
|
|
50
|
-
BlocListener<CallBloc, CallState>(
|
|
51
|
-
listenWhen: (prev, curr) => !prev.timedOut && curr.timedOut,
|
|
52
|
-
listener: (context, state) async {
|
|
53
|
-
ScaffoldMessenger.of(context).showSnackBar(
|
|
54
|
-
const SnackBar(content: Text('Call ended due to inactivity')),
|
|
55
|
-
);
|
|
56
|
-
Navigator.of(context).popUntil((route) => route.isFirst);
|
|
57
|
-
},
|
|
58
|
-
child: /* call surface */,
|
|
59
|
-
)
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
`BlocListener` is one-shot side effects (navigation, snackbars). `listenWhen` ensures the listener only fires on the transition.
|
|
63
|
-
|
|
64
|
-
---
|
|
65
|
-
|
|
66
|
-
## Custom prompt — same showDialog as V5
|
|
67
|
-
|
|
68
|
-
Identical code; cite V5 sister reference.
|
|
69
|
-
|
|
70
|
-
---
|
|
71
|
-
|
|
72
|
-
## Verification checklist
|
|
73
|
-
|
|
74
|
-
- [ ] `SessionSettingsBuilder().setIdleTimeoutPeriod(seconds)` sets the idle period
|
|
75
|
-
- [ ] CallBloc implements `SessionStatusListeners` and bridges `onSessionTimedOut` to `_SessionTimedOut`
|
|
76
|
-
- [ ] Listener registered via `CallSession.getInstance()?.addSessionStatusListener(this)`
|
|
77
|
-
- [ ] BlocListener with `listenWhen` triggers nav + snackbar
|
|
78
|
-
- [ ] Bloc `close()` removes the listener via `removeSessionStatusListener(this)`
|
|
79
|
-
- [ ] Real-device smoke: same as V5
|
|
80
|
-
|
|
81
|
-
---
|
|
82
|
-
|
|
83
|
-
## Pointers
|
|
84
|
-
|
|
85
|
-
- `cometchat-flutter-v5-calls/references/idle-timeout.md` — V5 sister
|
|
86
|
-
- `cometchat-flutter-v6-calls` SKILL.md — V6 hard rules
|
|
87
|
-
- `cometchat-flutter-v6-calls/references/raise-hand.md` — Bloc-bridge sibling pattern
|
|
88
|
-
- Canonical docs: https://www.cometchat.com/docs/calls/flutter/idle-timeout
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
# In-call chat on Flutter V6 (Bloc)
|
|
2
|
-
|
|
3
|
-
Same SDK shape; Bloc-driven open/unread state.
|
|
4
|
-
|
|
5
|
-
**Canonical docs:** https://www.cometchat.com/docs/calls/flutter/in-call-chat
|
|
6
|
-
**Read first:** `cometchat-flutter-v5-calls/references/in-call-chat.md` — sheet pattern + group-as-session helper.
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## State + bloc
|
|
11
|
-
|
|
12
|
-
```dart
|
|
13
|
-
class InCallChatState extends Equatable {
|
|
14
|
-
final bool open;
|
|
15
|
-
final int unread;
|
|
16
|
-
final Group? group;
|
|
17
|
-
const InCallChatState({this.open = false, this.unread = 0, this.group});
|
|
18
|
-
InCallChatState copyWith({bool? open, int? unread, Group? group}) =>
|
|
19
|
-
InCallChatState(open: open ?? this.open, unread: unread ?? this.unread, group: group ?? this.group);
|
|
20
|
-
@override List<Object?> get props => [open, unread, group?.guid];
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
abstract class InCallChatEvent {}
|
|
24
|
-
class InitChat extends InCallChatEvent { final String sessionId; InitChat(this.sessionId); }
|
|
25
|
-
class OpenChat extends InCallChatEvent {}
|
|
26
|
-
class CloseChat extends InCallChatEvent {}
|
|
27
|
-
class _MessageReceived extends InCallChatEvent {}
|
|
28
|
-
|
|
29
|
-
class InCallChatBloc extends Bloc<InCallChatEvent, InCallChatState> {
|
|
30
|
-
InCallChatBloc() : super(const InCallChatState()) {
|
|
31
|
-
on<InitChat>(_onInit);
|
|
32
|
-
on<OpenChat>(_onOpen);
|
|
33
|
-
on<CloseChat>(_onClose);
|
|
34
|
-
on<_MessageReceived>(_onReceived);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
Future<void> _onInit(InitChat event, Emitter<InCallChatState> emit) async {
|
|
38
|
-
final group = await ensureCallGroup(event.sessionId);
|
|
39
|
-
emit(state.copyWith(group: group));
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
void _onOpen(OpenChat event, Emitter<InCallChatState> emit) {
|
|
43
|
-
emit(state.copyWith(open: true, unread: 0));
|
|
44
|
-
// setChatButtonUnreadCount is an instance method on CallSession
|
|
45
|
-
// (cometchat_calls_sdk-5.0.2 src/call_session.dart:489), not static.
|
|
46
|
-
CallSession.getInstance()?.setChatButtonUnreadCount(0);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
void _onClose(OpenChat event, Emitter<InCallChatState> emit) {
|
|
50
|
-
emit(state.copyWith(open: false));
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
void _onReceived(_MessageReceived event, Emitter<InCallChatState> emit) {
|
|
54
|
-
if (state.open) return;
|
|
55
|
-
final next = state.unread + 1;
|
|
56
|
-
emit(state.copyWith(unread: next));
|
|
57
|
-
CallSession.getInstance()?.setChatButtonUnreadCount(next);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
---
|
|
63
|
-
|
|
64
|
-
## Triggering open from SDK event
|
|
65
|
-
|
|
66
|
-
`onChatButtonClicked()` is on `ButtonClickListeners` (v5 split listener), registered via `CallSession.getInstance()?.addButtonClickListener(...)` — NOT the deprecated `CometChatCallsEventsListener`:
|
|
67
|
-
|
|
68
|
-
```dart
|
|
69
|
-
// class ... implements ButtonClickListeners
|
|
70
|
-
@override
|
|
71
|
-
void onChatButtonClicked() {
|
|
72
|
-
context.read<InCallChatBloc>().add(OpenChat());
|
|
73
|
-
}
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
---
|
|
77
|
-
|
|
78
|
-
## Sheet UI
|
|
79
|
-
|
|
80
|
-
Same `showModalBottomSheet` shape as V5. Use `BlocSelector` to react to `state.open`:
|
|
81
|
-
|
|
82
|
-
```dart
|
|
83
|
-
BlocListener<InCallChatBloc, InCallChatState>(
|
|
84
|
-
listenWhen: (prev, curr) => !prev.open && curr.open,
|
|
85
|
-
listener: (context, state) {
|
|
86
|
-
if (state.group == null) return;
|
|
87
|
-
showModalBottomSheet(
|
|
88
|
-
context: context,
|
|
89
|
-
isScrollControlled: true,
|
|
90
|
-
barrierColor: Colors.transparent,
|
|
91
|
-
builder: (_) => InCallChatPanel(group: state.group!),
|
|
92
|
-
).whenComplete(() {
|
|
93
|
-
context.read<InCallChatBloc>().add(CloseChat());
|
|
94
|
-
});
|
|
95
|
-
},
|
|
96
|
-
child: /* call surface */,
|
|
97
|
-
)
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
---
|
|
101
|
-
|
|
102
|
-
## Anti-patterns
|
|
103
|
-
|
|
104
|
-
V5 sister rules apply, plus V6-specific:
|
|
105
|
-
|
|
106
|
-
1. **`BlocBuilder` instead of `BlocListener` for opening the sheet.** BlocBuilder is for rebuilding UI; sheet-open is a one-shot side effect → BlocListener.
|
|
107
|
-
2. **`listenWhen` omitted.** Sheet opens on every state change.
|
|
108
|
-
|
|
109
|
-
---
|
|
110
|
-
|
|
111
|
-
## Verification checklist
|
|
112
|
-
|
|
113
|
-
- [ ] InCallChatBloc with `InitChat`, `OpenChat`, `CloseChat`, `_MessageReceived` events
|
|
114
|
-
- [ ] BlocListener with `listenWhen` for the open transition
|
|
115
|
-
- [ ] `showModalBottomSheet.whenComplete` dispatches `CloseChat`
|
|
116
|
-
- [ ] Real-device smoke: same as V5
|
|
117
|
-
|
|
118
|
-
---
|
|
119
|
-
|
|
120
|
-
## Pointers
|
|
121
|
-
|
|
122
|
-
- `cometchat-flutter-v5-calls/references/in-call-chat.md` — V5 sister (sheet pattern)
|
|
123
|
-
- `cometchat-flutter-v6-calls` SKILL.md
|
|
124
|
-
- `cometchat-flutter-v6-calls/references/raise-hand.md` — Bloc bridge sibling
|
|
125
|
-
- Canonical docs: https://www.cometchat.com/docs/calls/flutter/in-call-chat
|
|
@@ -1,275 +0,0 @@
|
|
|
1
|
-
# Raise hand on Flutter (UIKit V6, Bloc-based)
|
|
2
|
-
|
|
3
|
-
Same SDK conceptual API as V5; the difference is state management — V6 uses `flutter_bloc` rather than GetX. The reactive shape is `RaiseHandBloc → emit(state)` where state is an immutable record of `localRaised + raisedParticipants`.
|
|
4
|
-
|
|
5
|
-
**Canonical docs:** https://www.cometchat.com/docs/calls/flutter/raise-hand
|
|
6
|
-
**Read first:** `cometchat-flutter-v5-calls/references/raise-hand.md` — UX shape is identical; this is the V6 Bloc translation.
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## SDK API (same as V5)
|
|
11
|
-
|
|
12
|
-
Raise/lower hand are **instance methods on the `CallSession` singleton**, NOT static on `CometChatCalls` (verified `cometchat_calls_sdk-5.0.2` `src/call_session.dart:292,306`; the static `CometChatCalls` class has no `raiseHand`/`lowerHand`). Participant hand events arrive via `ParticipantEventListeners`, registered through `CallSession.getInstance()?.addParticipantEventListener(...)` (`src/call_session.dart:78`) — there is no `CometChatCalls.addCallEventListener`.
|
|
13
|
-
|
|
14
|
-
```dart
|
|
15
|
-
import 'package:cometchat_chat_uikit/cometchat_chat_uikit.dart';
|
|
16
|
-
import 'package:cometchat_chat_uikit/cometchat_calls_uikit.dart';
|
|
17
|
-
|
|
18
|
-
CallSession.getInstance()?.raiseHand();
|
|
19
|
-
CallSession.getInstance()?.lowerHand();
|
|
20
|
-
|
|
21
|
-
// Register a ParticipantEventListeners implementation:
|
|
22
|
-
CallSession.getInstance()?.addParticipantEventListener(myListener);
|
|
23
|
-
|
|
24
|
-
// In your ParticipantEventListeners implementation:
|
|
25
|
-
@override
|
|
26
|
-
void onParticipantHandRaised(Participant p) { /* ... */ }
|
|
27
|
-
@override
|
|
28
|
-
void onParticipantHandLowered(Participant p) { /* ... */ }
|
|
29
|
-
|
|
30
|
-
// hideRaiseHandButton is a METHOD on the (non-deprecated) SessionSettingsBuilder.
|
|
31
|
-
// `CallSettingsBuilder` is @Deprecated in 5.0.2 (src/builder/call_settings.dart:208).
|
|
32
|
-
final settings = SessionSettingsBuilder().hideRaiseHandButton(true).build();
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
|
|
37
|
-
## Bloc setup
|
|
38
|
-
|
|
39
|
-
```dart
|
|
40
|
-
import 'package:bloc/bloc.dart';
|
|
41
|
-
import 'package:equatable/equatable.dart';
|
|
42
|
-
import 'package:cometchat_chat_uikit/cometchat_calls_uikit.dart';
|
|
43
|
-
|
|
44
|
-
// State
|
|
45
|
-
class RaiseHandState extends Equatable {
|
|
46
|
-
final bool localRaised;
|
|
47
|
-
final List<RaisedParticipant> raised;
|
|
48
|
-
const RaiseHandState({this.localRaised = false, this.raised = const []});
|
|
49
|
-
|
|
50
|
-
RaiseHandState copyWith({bool? localRaised, List<RaisedParticipant>? raised}) =>
|
|
51
|
-
RaiseHandState(
|
|
52
|
-
localRaised: localRaised ?? this.localRaised,
|
|
53
|
-
raised: raised ?? this.raised,
|
|
54
|
-
);
|
|
55
|
-
|
|
56
|
-
@override
|
|
57
|
-
List<Object> get props => [localRaised, raised];
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
class RaisedParticipant extends Equatable {
|
|
61
|
-
final String uid;
|
|
62
|
-
final String name;
|
|
63
|
-
final DateTime raisedAt;
|
|
64
|
-
const RaisedParticipant({required this.uid, required this.name, required this.raisedAt});
|
|
65
|
-
@override
|
|
66
|
-
List<Object> get props => [uid, name, raisedAt];
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
// Events
|
|
70
|
-
abstract class RaiseHandEvent {}
|
|
71
|
-
class ToggleHand extends RaiseHandEvent {}
|
|
72
|
-
class _ParticipantRaised extends RaiseHandEvent {
|
|
73
|
-
final Participant participant;
|
|
74
|
-
_ParticipantRaised(this.participant);
|
|
75
|
-
}
|
|
76
|
-
class _ParticipantLowered extends RaiseHandEvent {
|
|
77
|
-
final Participant participant;
|
|
78
|
-
_ParticipantLowered(this.participant);
|
|
79
|
-
}
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
---
|
|
83
|
-
|
|
84
|
-
## Bloc implementation
|
|
85
|
-
|
|
86
|
-
```dart
|
|
87
|
-
class RaiseHandBloc extends Bloc<RaiseHandEvent, RaiseHandState>
|
|
88
|
-
implements ParticipantEventListeners {
|
|
89
|
-
|
|
90
|
-
RaiseHandBloc() : super(const RaiseHandState()) {
|
|
91
|
-
on<ToggleHand>(_onToggle);
|
|
92
|
-
on<_ParticipantRaised>(_onParticipantRaised);
|
|
93
|
-
on<_ParticipantLowered>(_onParticipantLowered);
|
|
94
|
-
|
|
95
|
-
// Self-register as the participant event listener (v5 split listener).
|
|
96
|
-
CallSession.getInstance()?.addParticipantEventListener(this);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
void _onToggle(ToggleHand event, Emitter<RaiseHandState> emit) {
|
|
100
|
-
if (state.localRaised) {
|
|
101
|
-
CallSession.getInstance()?.lowerHand();
|
|
102
|
-
} else {
|
|
103
|
-
CallSession.getInstance()?.raiseHand();
|
|
104
|
-
}
|
|
105
|
-
emit(state.copyWith(localRaised: !state.localRaised));
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
void _onParticipantRaised(_ParticipantRaised event, Emitter<RaiseHandState> emit) {
|
|
109
|
-
final entry = RaisedParticipant(
|
|
110
|
-
uid: event.participant.uid,
|
|
111
|
-
name: event.participant.name,
|
|
112
|
-
raisedAt: DateTime.now(),
|
|
113
|
-
);
|
|
114
|
-
final next = [...state.raised.where((r) => r.uid != entry.uid), entry];
|
|
115
|
-
next.sort((a, b) => a.raisedAt.compareTo(b.raisedAt));
|
|
116
|
-
emit(state.copyWith(raised: next));
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
void _onParticipantLowered(_ParticipantLowered event, Emitter<RaiseHandState> emit) {
|
|
120
|
-
final next = state.raised.where((r) => r.uid != event.participant.uid).toList();
|
|
121
|
-
emit(state.copyWith(raised: next));
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
// ParticipantEventListeners — bridge to Bloc events
|
|
125
|
-
@override
|
|
126
|
-
void onParticipantHandRaised(Participant p) {
|
|
127
|
-
add(_ParticipantRaised(p));
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
@override
|
|
131
|
-
void onParticipantHandLowered(Participant p) {
|
|
132
|
-
add(_ParticipantLowered(p));
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
// ... implement other ParticipantEventListeners methods (no-ops or pass-through)
|
|
136
|
-
|
|
137
|
-
@override
|
|
138
|
-
Future<void> close() {
|
|
139
|
-
CallSession.getInstance()?.removeParticipantEventListener(this);
|
|
140
|
-
return super.close();
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
The bridge pattern: the bloc IS the SDK listener. SDK callbacks call `add()` on the bloc, which dispatches an event handler that emits new state. This keeps Bloc's "single source of truth" intact — no parallel state outside the bloc.
|
|
146
|
-
|
|
147
|
-
---
|
|
148
|
-
|
|
149
|
-
## Toggle button widget
|
|
150
|
-
|
|
151
|
-
```dart
|
|
152
|
-
class RaiseHandButton extends StatelessWidget {
|
|
153
|
-
const RaiseHandButton({super.key});
|
|
154
|
-
|
|
155
|
-
@override
|
|
156
|
-
Widget build(BuildContext context) {
|
|
157
|
-
return BlocBuilder<RaiseHandBloc, RaiseHandState>(
|
|
158
|
-
buildWhen: (prev, curr) => prev.localRaised != curr.localRaised,
|
|
159
|
-
builder: (context, state) => Semantics(
|
|
160
|
-
button: true,
|
|
161
|
-
selected: state.localRaised,
|
|
162
|
-
label: state.localRaised ? 'Lower hand' : 'Raise hand',
|
|
163
|
-
child: GestureDetector(
|
|
164
|
-
onTap: () {
|
|
165
|
-
context.read<RaiseHandBloc>().add(ToggleHand());
|
|
166
|
-
SemanticsService.announce(
|
|
167
|
-
state.localRaised ? 'Hand lowered' : 'Hand raised',
|
|
168
|
-
TextDirection.ltr,
|
|
169
|
-
);
|
|
170
|
-
},
|
|
171
|
-
child: Container(
|
|
172
|
-
padding: const EdgeInsets.all(12),
|
|
173
|
-
decoration: BoxDecoration(
|
|
174
|
-
color: state.localRaised ? const Color(0xFFFFD60A) : Colors.white24,
|
|
175
|
-
borderRadius: BorderRadius.circular(32),
|
|
176
|
-
),
|
|
177
|
-
child: Row(
|
|
178
|
-
children: [
|
|
179
|
-
const Text('✋'),
|
|
180
|
-
const SizedBox(width: 4),
|
|
181
|
-
Text(state.localRaised ? 'Lower' : 'Raise'),
|
|
182
|
-
],
|
|
183
|
-
),
|
|
184
|
-
),
|
|
185
|
-
),
|
|
186
|
-
),
|
|
187
|
-
);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
`buildWhen` ensures the button only rebuilds when `localRaised` changes — not on every roster update. Performance discipline matters in a video call.
|
|
193
|
-
|
|
194
|
-
---
|
|
195
|
-
|
|
196
|
-
## Raised-hands sheet
|
|
197
|
-
|
|
198
|
-
Same `DraggableScrollableSheet` shape as V5; bind via `BlocBuilder` instead of `Obx`:
|
|
199
|
-
|
|
200
|
-
```dart
|
|
201
|
-
BlocBuilder<RaiseHandBloc, RaiseHandState>(
|
|
202
|
-
buildWhen: (prev, curr) => prev.raised != curr.raised,
|
|
203
|
-
builder: (context, state) => ListView(
|
|
204
|
-
children: [
|
|
205
|
-
Text('Raised hands (${state.raised.length})'),
|
|
206
|
-
for (final p in state.raised)
|
|
207
|
-
ListTile(leading: const Text('✋'), title: Text(p.name)),
|
|
208
|
-
],
|
|
209
|
-
),
|
|
210
|
-
)
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
`buildWhen` again — only rebuild when the roster changes, not on toggle.
|
|
214
|
-
|
|
215
|
-
---
|
|
216
|
-
|
|
217
|
-
## Wiring to the call screen
|
|
218
|
-
|
|
219
|
-
```dart
|
|
220
|
-
class CallScreen extends StatelessWidget {
|
|
221
|
-
@override
|
|
222
|
-
Widget build(BuildContext context) {
|
|
223
|
-
return BlocProvider(
|
|
224
|
-
create: (_) => RaiseHandBloc(),
|
|
225
|
-
child: Scaffold(
|
|
226
|
-
body: Stack(
|
|
227
|
-
children: [
|
|
228
|
-
// ... call surface (CometChatOngoingCall)
|
|
229
|
-
const Positioned(bottom: 100, right: 20, child: RaiseHandButton()),
|
|
230
|
-
const RaisedHandsSheet(),
|
|
231
|
-
],
|
|
232
|
-
),
|
|
233
|
-
),
|
|
234
|
-
);
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
```
|
|
238
|
-
|
|
239
|
-
`BlocProvider(create:)` scopes the bloc to the screen — disposed automatically on screen pop.
|
|
240
|
-
|
|
241
|
-
---
|
|
242
|
-
|
|
243
|
-
## Anti-patterns
|
|
244
|
-
|
|
245
|
-
Web sister reference rules apply, plus V6-specific:
|
|
246
|
-
|
|
247
|
-
1. **`buildWhen` omitted.** Every state change rebuilds every BlocBuilder — lots of unnecessary work during a call. Add `buildWhen` for narrow rebuilds.
|
|
248
|
-
2. **Mutating `state.raised` directly** instead of creating a new list. `Equatable` props compare via `==`; mutation doesn't trigger rebuild.
|
|
249
|
-
3. **Calling `CallSession.getInstance()?.raiseHand()` outside the bloc.** Bypasses the state machine; UI doesn't update. Always go through `add(ToggleHand())`.
|
|
250
|
-
4. **Adding the SDK listener in `initState`** instead of the bloc constructor. Component-level lifecycle ≠ Bloc lifecycle. Bloc `close()` is the canonical place to clean up.
|
|
251
|
-
|
|
252
|
-
---
|
|
253
|
-
|
|
254
|
-
## Verification checklist
|
|
255
|
-
|
|
256
|
-
- [ ] `RaiseHandBloc` extends `Bloc<RaiseHandEvent, RaiseHandState>`
|
|
257
|
-
- [ ] `RaiseHandState` extends `Equatable` with proper `props`
|
|
258
|
-
- [ ] Bloc registers itself as `ParticipantEventListeners` via `CallSession.getInstance()?.addParticipantEventListener(this)` in constructor
|
|
259
|
-
- [ ] Bloc `close()` removes the listener via `removeParticipantEventListener(this)`
|
|
260
|
-
- [ ] `BlocProvider(create:)` scopes the bloc to the call screen
|
|
261
|
-
- [ ] `buildWhen` on every BlocBuilder narrows rebuilds
|
|
262
|
-
- [ ] `Semantics` + `SemanticsService.announce` for a11y
|
|
263
|
-
- [ ] `SessionSettingsBuilder().hideRaiseHandButton(true)` if custom UI
|
|
264
|
-
- [ ] Real-device smoke: 3 devices (iOS + Android), 2 raise hands, host sees both
|
|
265
|
-
- [ ] Hot-reload smoke: trigger raise → save code → bloc state survives (bloc is created via `create:`, persists across hot reload)
|
|
266
|
-
|
|
267
|
-
---
|
|
268
|
-
|
|
269
|
-
## Pointers
|
|
270
|
-
|
|
271
|
-
- `cometchat-react-calls/references/raise-hand.md` — sister reference (UX shape)
|
|
272
|
-
- `cometchat-flutter-v5-calls/references/raise-hand.md` — V5 sibling (GetX-based)
|
|
273
|
-
- `cometchat-flutter-v6-calls` SKILL.md — V6 hard rules + Bloc patterns
|
|
274
|
-
- `cometchat-a11y` — Flutter Semantics + SemanticsService
|
|
275
|
-
- Canonical docs: https://www.cometchat.com/docs/calls/flutter/raise-hand
|
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
# Ringing — call signaling with custom UI (Flutter V6 / Bloc)
|
|
2
|
-
|
|
3
|
-
Same SDK shape; Bloc-driven state instead of GetX.
|
|
4
|
-
|
|
5
|
-
**Read first:**
|
|
6
|
-
- `cometchat-flutter-v5-calls/references/ringing-integration.md` — V5 sister (GetX patterns)
|
|
7
|
-
- `cometchat-react-calls/references/ringing-integration.md` — full architecture, hard rules
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
## Bloc
|
|
12
|
-
|
|
13
|
-
```dart
|
|
14
|
-
class CallSignalingState extends Equatable {
|
|
15
|
-
final Call? incoming;
|
|
16
|
-
final Call? outgoing;
|
|
17
|
-
final String? activeSessionId;
|
|
18
|
-
|
|
19
|
-
const CallSignalingState({this.incoming, this.outgoing, this.activeSessionId});
|
|
20
|
-
CallSignalingState copyWith({Call? incoming, Call? outgoing, String? activeSessionId}) =>
|
|
21
|
-
CallSignalingState(
|
|
22
|
-
incoming: incoming ?? this.incoming,
|
|
23
|
-
outgoing: outgoing ?? this.outgoing,
|
|
24
|
-
activeSessionId: activeSessionId ?? this.activeSessionId,
|
|
25
|
-
);
|
|
26
|
-
CallSignalingState clear() => const CallSignalingState();
|
|
27
|
-
@override
|
|
28
|
-
List<Object?> get props => [incoming?.sessionId, outgoing?.sessionId, activeSessionId];
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
abstract class CallSignalingEvent {}
|
|
32
|
-
class _IncomingReceived extends CallSignalingEvent { final Call call; _IncomingReceived(this.call); }
|
|
33
|
-
class _OutgoingAccepted extends CallSignalingEvent { final Call call; _OutgoingAccepted(this.call); }
|
|
34
|
-
class _OutgoingRejected extends CallSignalingEvent {}
|
|
35
|
-
class _IncomingCancelled extends CallSignalingEvent {}
|
|
36
|
-
class _CallEnded extends CallSignalingEvent {}
|
|
37
|
-
class InitiateCall extends CallSignalingEvent { final String receiverUid; final String type; InitiateCall(this.receiverUid, {this.type = 'video'}); }
|
|
38
|
-
class AcceptCall extends CallSignalingEvent { final Call call; AcceptCall(this.call); }
|
|
39
|
-
class RejectCall extends CallSignalingEvent { final Call call; RejectCall(this.call); }
|
|
40
|
-
|
|
41
|
-
class CallSignalingBloc extends Bloc<CallSignalingEvent, CallSignalingState> implements CallListener {
|
|
42
|
-
static const _listenerId = 'app';
|
|
43
|
-
|
|
44
|
-
CallSignalingBloc() : super(const CallSignalingState()) {
|
|
45
|
-
on<_IncomingReceived>((e, emit) => emit(state.copyWith(incoming: e.call)));
|
|
46
|
-
on<_OutgoingAccepted>((e, emit) => emit(state.copyWith(outgoing: null, activeSessionId: e.call.sessionId)));
|
|
47
|
-
on<_OutgoingRejected>((_, emit) => emit(state.copyWith(outgoing: null)));
|
|
48
|
-
on<_IncomingCancelled>((_, emit) => emit(state.copyWith(incoming: null)));
|
|
49
|
-
on<_CallEnded>((_, emit) => emit(state.clear()));
|
|
50
|
-
on<InitiateCall>(_onInitiate);
|
|
51
|
-
on<AcceptCall>(_onAccept);
|
|
52
|
-
on<RejectCall>(_onReject);
|
|
53
|
-
|
|
54
|
-
CometChat.addCallListener(_listenerId, this);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
@override
|
|
58
|
-
void onIncomingCallReceived(Call call) => add(_IncomingReceived(call));
|
|
59
|
-
@override
|
|
60
|
-
void onOutgoingCallAccepted(Call call) => add(_OutgoingAccepted(call));
|
|
61
|
-
@override
|
|
62
|
-
void onOutgoingCallRejected(Call call) => add(_OutgoingRejected());
|
|
63
|
-
@override
|
|
64
|
-
void onIncomingCallCancelled(Call call) => add(_IncomingCancelled());
|
|
65
|
-
@override
|
|
66
|
-
void onCallEndedMessageReceived(Call call) => add(_CallEnded());
|
|
67
|
-
|
|
68
|
-
Future<void> _onInitiate(InitiateCall e, Emitter<CallSignalingState> emit) async {
|
|
69
|
-
final call = Call(
|
|
70
|
-
receiverUid: e.receiverUid,
|
|
71
|
-
callType: e.type == 'video' ? CometChatCallType.video : CometChatCallType.audio,
|
|
72
|
-
receiverType: CometChatReceiverType.user,
|
|
73
|
-
);
|
|
74
|
-
final result = await CometChat.initiateCall(call: call);
|
|
75
|
-
if (result is Call) emit(state.copyWith(outgoing: result));
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
Future<void> _onAccept(AcceptCall e, Emitter<CallSignalingState> emit) async {
|
|
79
|
-
final result = await CometChat.acceptCall(sessionId: e.call.sessionId!);
|
|
80
|
-
if (result is Call) emit(state.copyWith(incoming: null, activeSessionId: result.sessionId));
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
Future<void> _onReject(RejectCall e, Emitter<CallSignalingState> emit) async {
|
|
84
|
-
await CometChat.rejectCall(sessionId: e.call.sessionId!, status: CallStatus.rejected);
|
|
85
|
-
emit(state.copyWith(incoming: null));
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
@override
|
|
89
|
-
Future<void> close() {
|
|
90
|
-
CometChat.removeCallListener(_listenerId);
|
|
91
|
-
return super.close();
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
---
|
|
97
|
-
|
|
98
|
-
## Provide above the router
|
|
99
|
-
|
|
100
|
-
```dart
|
|
101
|
-
BlocProvider<CallSignalingBloc>(
|
|
102
|
-
create: (_) => CallSignalingBloc(),
|
|
103
|
-
child: MaterialApp.router(...),
|
|
104
|
-
);
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
---
|
|
108
|
-
|
|
109
|
-
## Incoming-call overlay
|
|
110
|
-
|
|
111
|
-
```dart
|
|
112
|
-
class IncomingCallOverlay extends StatelessWidget {
|
|
113
|
-
const IncomingCallOverlay({super.key});
|
|
114
|
-
|
|
115
|
-
@override
|
|
116
|
-
Widget build(BuildContext context) {
|
|
117
|
-
return BlocBuilder<CallSignalingBloc, CallSignalingState>(
|
|
118
|
-
buildWhen: (prev, curr) => prev.incoming?.sessionId != curr.incoming?.sessionId,
|
|
119
|
-
builder: (context, state) {
|
|
120
|
-
final call = state.incoming;
|
|
121
|
-
if (call == null) return const SizedBox.shrink();
|
|
122
|
-
// Same UI as V5 sister; replace ctrl.accept/reject with bloc.add(...)
|
|
123
|
-
return Material(/* ... see V5 sister ... */);
|
|
124
|
-
},
|
|
125
|
-
);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
Mount in `MaterialApp.builder`:
|
|
131
|
-
|
|
132
|
-
```dart
|
|
133
|
-
MaterialApp.router(
|
|
134
|
-
builder: (context, child) => Stack(
|
|
135
|
-
children: [
|
|
136
|
-
child ?? const SizedBox.shrink(),
|
|
137
|
-
const IncomingCallOverlay(),
|
|
138
|
-
],
|
|
139
|
-
),
|
|
140
|
-
routerConfig: ...,
|
|
141
|
-
);
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
---
|
|
145
|
-
|
|
146
|
-
## Anti-patterns
|
|
147
|
-
|
|
148
|
-
V5 sister rules apply, plus V6-specific:
|
|
149
|
-
|
|
150
|
-
1. **`BlocBuilder` without `buildWhen`.** Rebuilds on every state change — listener events for outgoing/active also retrigger incoming UI.
|
|
151
|
-
2. **Calling SDK methods from UI directly.** Adds back to bloc — use `bloc.add(InitiateCall(...))`.
|
|
152
|
-
3. **Provider scoped to a feature module.** Backgrounded ring path can't find the bloc when push fires.
|
|
153
|
-
|
|
154
|
-
---
|
|
155
|
-
|
|
156
|
-
## Verification checklist
|
|
157
|
-
|
|
158
|
-
- [ ] `BlocProvider<CallSignalingBloc>` above `MaterialApp`
|
|
159
|
-
- [ ] `IncomingCallOverlay` in `MaterialApp.builder`'s Stack
|
|
160
|
-
- [ ] `BlocBuilder` uses `buildWhen` to scope rebuilds to `incoming` changes
|
|
161
|
-
- [ ] `close()` calls `removeCallListener`
|
|
162
|
-
- [ ] Real-device smoke: same as V5 sister
|
|
163
|
-
|
|
164
|
-
---
|
|
165
|
-
|
|
166
|
-
## Pointers
|
|
167
|
-
|
|
168
|
-
- `cometchat-flutter-v5-calls/references/ringing-integration.md` — V5 sister (GetX)
|
|
169
|
-
- `cometchat-flutter-v6-calls/SKILL.md` — V6 Bloc patterns
|
|
170
|
-
- `cometchat-flutter-v6-calls/references/server-push-bridge.md` — backgrounded ring
|
|
171
|
-
- Canonical docs: https://www.cometchat.com/docs/calls/flutter/ringing
|