@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,384 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: cometchat-flutter-v6-messages
|
|
3
|
-
description: >
|
|
4
|
-
Use when implementing the messages screen with CometChat Flutter UIKit v6. Covers
|
|
5
|
-
CometChatMessageList, CometChatMessageComposer, CometChatMessageHeader, MessageListBloc,
|
|
6
|
-
MessageComposerBloc, SliverSpacing, keyboard-aware spacing, rich text toolbar,
|
|
7
|
-
CometChatTextBubble, CometChatImageBubble, CometChatVideoBubble, CometChatAudioBubble,
|
|
8
|
-
CometChatFileBubble, CometChatMessageBubble, bubble factories, message templates,
|
|
9
|
-
send message, edit message, delete message, reply, thread, reactions, receipts,
|
|
10
|
-
typing indicators, mentions, markdown formatting, text formatters, scroll to bottom,
|
|
11
|
-
unread messages, mark as read, goToMessageId, message options, swipe to reply,
|
|
12
|
-
smart replies, conversation starters, or resizeToAvoidBottomInset. Also use when
|
|
13
|
-
the user asks about building a chat screen, message input, or message display.
|
|
14
|
-
license: "MIT"
|
|
15
|
-
compatibility: "cometchat_chat_uikit ^6.0.1; flutter_bloc ^8.1.0"
|
|
16
|
-
metadata:
|
|
17
|
-
author: "CometChat"
|
|
18
|
-
version: "3.0.0"
|
|
19
|
-
tags: "cometchat flutter messages composer header bubbles keyboard rich-text"
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
> **Ground truth:** `cometchat_chat_uikit: ^6.0` — pub-cache source + `ui-kit/flutter`. **Official docs:** https://www.cometchat.com/docs/ui-kit/flutter/overview · **Docs MCP:** `claude mcp add --transport http cometchat-docs https://www.cometchat.com/docs/mcp` (or fetch the URL directly without MCP). Verify symbols against the installed package/source before relying on them.
|
|
23
|
-
|
|
24
|
-
# CometChat Flutter UIKit — Messages
|
|
25
|
-
|
|
26
|
-
The messages screen is composed of three components: `CometChatMessageHeader`, `CometChatMessageList`, and `CometChatMessageComposer`.
|
|
27
|
-
|
|
28
|
-
## Complete Messages Screen
|
|
29
|
-
|
|
30
|
-
```dart
|
|
31
|
-
final colorPalette = CometChatThemeHelper.getColorPalette(context);
|
|
32
|
-
Scaffold(
|
|
33
|
-
resizeToAvoidBottomInset: true, // matches sample app; composer clamps to viewInsets (ENG-34434)
|
|
34
|
-
appBar: CometChatMessageHeader(
|
|
35
|
-
user: user,
|
|
36
|
-
group: group,
|
|
37
|
-
onBack: () => Navigator.pop(context),
|
|
38
|
-
),
|
|
39
|
-
body: SafeArea(
|
|
40
|
-
top: false, // Header is the appBar — top inset already handled; keep bottom inset
|
|
41
|
-
child: Container(
|
|
42
|
-
color: colorPalette.background3,
|
|
43
|
-
child: Column(
|
|
44
|
-
children: [
|
|
45
|
-
Expanded(
|
|
46
|
-
child: CometChatMessageList(
|
|
47
|
-
user: user,
|
|
48
|
-
group: group,
|
|
49
|
-
textFormatters: [
|
|
50
|
-
CometChatMentionsFormatter(user: user, group: group),
|
|
51
|
-
MarkdownTextFormatter(),
|
|
52
|
-
CometChatUrlFormatter(),
|
|
53
|
-
CometChatPhoneNumberFormatter(),
|
|
54
|
-
CometChatEmailFormatter(),
|
|
55
|
-
],
|
|
56
|
-
),
|
|
57
|
-
),
|
|
58
|
-
CometChatMessageComposer(
|
|
59
|
-
user: user,
|
|
60
|
-
group: group,
|
|
61
|
-
textFormatters: [
|
|
62
|
-
CometChatMentionsFormatter(user: user, group: group),
|
|
63
|
-
MarkdownTextFormatter(),
|
|
64
|
-
CometChatUrlFormatter(),
|
|
65
|
-
CometChatPhoneNumberFormatter(),
|
|
66
|
-
CometChatEmailFormatter(),
|
|
67
|
-
],
|
|
68
|
-
),
|
|
69
|
-
],
|
|
70
|
-
),
|
|
71
|
-
),
|
|
72
|
-
),
|
|
73
|
-
)
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
## CometChatMessageList
|
|
77
|
-
|
|
78
|
-
Displays messages with `SliverAnimatedList`, O(1) lookups, and keyboard-aware spacing.
|
|
79
|
-
|
|
80
|
-
### Key Props
|
|
81
|
-
|
|
82
|
-
| Prop | Type | Purpose |
|
|
83
|
-
|------|------|---------|
|
|
84
|
-
| `user` / `group` | `User?` / `Group?` | Target conversation (one required) |
|
|
85
|
-
| `goToMessageId` | `int?` | Jump to specific message on load |
|
|
86
|
-
| `startFromUnreadMessages` | `bool` | Start from unread position |
|
|
87
|
-
| `hideDeletedMessages` | `bool` | Hide deleted message placeholders |
|
|
88
|
-
| `disableReceipts` | `bool` | Hide read/delivered receipts |
|
|
89
|
-
| `disableReactions` | `bool` | Hide reaction bar |
|
|
90
|
-
| `enableSwipeToReply` | `bool` | Swipe gesture for reply |
|
|
91
|
-
| `hideDateSeparator` | `bool` | Hide date headers |
|
|
92
|
-
| `textFormatters` | `List<CometChatTextFormatter>` | Formatters for message text |
|
|
93
|
-
| `onThreadRepliesClick` | `Function(BaseMessage, BuildContext, {template})` | Thread navigation callback |
|
|
94
|
-
| `messagesRequestBuilder` | `MessagesRequestBuilder?` | Customize the underlying message query (see below) |
|
|
95
|
-
|
|
96
|
-
### MessagesRequestBuilder — customizing the message query
|
|
97
|
-
|
|
98
|
-
`CometChatMessageList` accepts a `messagesRequestBuilder` prop that lets you customize the underlying SDK request — page size, filters, search, etc. The class lives in the Chat SDK (`package:cometchat_sdk/cometchat_sdk.dart`) and exposes 30+ fluent setters. Common setters:
|
|
99
|
-
|
|
100
|
-
| Setter | Purpose |
|
|
101
|
-
|--------|---------|
|
|
102
|
-
| `setLimit(int)` | Page size (default 30, max 100) |
|
|
103
|
-
| `setTypes(List<String>)` | Restrict to message types (e.g. `['text', 'image']`) |
|
|
104
|
-
| `setCategories(List<String>)` | Restrict to categories (e.g. `['message', 'custom']`) |
|
|
105
|
-
| `setHideMessagesFromBlockedUsers(bool)` | Drop messages from blocked users |
|
|
106
|
-
| `setSearchKeyword(String)` | Server-side keyword search |
|
|
107
|
-
| `setTags(List<String>)` | Filter by message tags |
|
|
108
|
-
| `setHasAttachments(bool)` | Only messages with file attachments |
|
|
109
|
-
| `setHasLinks(bool)` | Only messages containing links |
|
|
110
|
-
| `setHideReplies(bool)` | Exclude threaded replies from the main list |
|
|
111
|
-
| `setHideDeleted(bool)` | Exclude deleted messages |
|
|
112
|
-
| `setHideQuotedMessages(bool)` | Exclude quoted-reply messages |
|
|
113
|
-
| `setUpdatedAfter(DateTime)` | Only messages updated after this DateTime |
|
|
114
|
-
| `setUpdatesOnly(bool)` | Return only updates, not new messages |
|
|
115
|
-
| `setParentMessageId(int)` | Fetch a thread's replies |
|
|
116
|
-
| `setMentionedUIDs(List<String>)` | Messages mentioning specific users |
|
|
117
|
-
| `setHasMentions(bool)` | Only messages with any mention |
|
|
118
|
-
|
|
119
|
-
Example — limit to 30, hide messages from blocked users, restrict to text + image:
|
|
120
|
-
|
|
121
|
-
```dart
|
|
122
|
-
CometChatMessageList(
|
|
123
|
-
user: user,
|
|
124
|
-
messagesRequestBuilder: MessagesRequestBuilder()
|
|
125
|
-
..setLimit(30)
|
|
126
|
-
..setHideMessagesFromBlockedUsers(true)
|
|
127
|
-
..setTypes(['text', 'image']),
|
|
128
|
-
)
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
### MessageListBloc Events
|
|
132
|
-
|
|
133
|
-
| Event | Purpose |
|
|
134
|
-
|-------|---------|
|
|
135
|
-
| `LoadMessages(conversationWith, conversationType)` | Initial load |
|
|
136
|
-
| `LoadOlderMessages` | Scroll up pagination |
|
|
137
|
-
| `LoadNewerMessages` | Scroll down pagination |
|
|
138
|
-
| `MessageReceived(message)` | Real-time incoming message |
|
|
139
|
-
| `MessageEdited(message)` | Real-time edit |
|
|
140
|
-
| `MessageDeleted(message)` | Real-time delete |
|
|
141
|
-
| `JumpToMessage(messageId)` | Scroll to specific message |
|
|
142
|
-
| `MarkMessageAsRead(message)` | Mark as read |
|
|
143
|
-
| `MarkMessageAsUnread(message)` | Mark as unread |
|
|
144
|
-
|
|
145
|
-
### MessageListState
|
|
146
|
-
|
|
147
|
-
```dart
|
|
148
|
-
MessageListState(
|
|
149
|
-
status: MessageListStatus.loaded, // initial, loading, loaded, empty, error
|
|
150
|
-
messages: [...],
|
|
151
|
-
isLoadingOlder: false,
|
|
152
|
-
isLoadingNewer: false,
|
|
153
|
-
hasMoreOlder: true,
|
|
154
|
-
hasMoreNewer: false,
|
|
155
|
-
unreadCount: 5,
|
|
156
|
-
unreadMessageAnchor: message,
|
|
157
|
-
)
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
## CometChatMessageComposer
|
|
161
|
-
|
|
162
|
-
Rich text input with formatting toolbar, attachments, mentions, and audio recording.
|
|
163
|
-
|
|
164
|
-
### Key Props
|
|
165
|
-
|
|
166
|
-
| Prop | Type | Purpose |
|
|
167
|
-
|------|------|---------|
|
|
168
|
-
| `user` / `group` | `User?` / `Group?` | Target conversation |
|
|
169
|
-
| `disableTypingEvents` | `bool` | Stop sending typing indicators |
|
|
170
|
-
| `hideVoiceRecordingButton` | `bool` | Hide audio recorder |
|
|
171
|
-
| `hideSendButton` | `bool` | Hide send button |
|
|
172
|
-
| `hideAttachmentButton` | `bool` | Hide attachment picker |
|
|
173
|
-
| `hideStickersButton` | `bool` | Hide sticker panel |
|
|
174
|
-
| `disableMentions` | `bool` | Disable @mentions |
|
|
175
|
-
| `hideBottomSafeArea` | `bool` | Hide bottom safe area padding |
|
|
176
|
-
| `textFormatters` | `List<CometChatTextFormatter>` | Text formatters |
|
|
177
|
-
|
|
178
|
-
### Rich Text Formatting
|
|
179
|
-
|
|
180
|
-
The composer uses a WYSIWYG system (not the clean architecture module):
|
|
181
|
-
- `RichTextEditingController` — span tracking, markdown rendering, format application
|
|
182
|
-
- `SegmentComposerController` — multi-segment (normal text + code blocks)
|
|
183
|
-
- Toolbar buttons dispatch through `cometchat_message_composer.dart`
|
|
184
|
-
|
|
185
|
-
### buildWhen Optimization
|
|
186
|
-
|
|
187
|
-
The composer uses `buildWhen` to prevent rebuilds during keyboard animation:
|
|
188
|
-
```dart
|
|
189
|
-
BlocConsumer<MessageComposerBloc, MessageComposerState>(
|
|
190
|
-
buildWhen: (previous, current) =>
|
|
191
|
-
previous.isEditMode != current.isEditMode ||
|
|
192
|
-
previous.isReplyMode != current.isReplyMode ||
|
|
193
|
-
previous.isRecordingMode != current.isRecordingMode,
|
|
194
|
-
// ...
|
|
195
|
-
)
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
The actual filter in `cometchat_message_composer.dart` also covers `editMessage` / `replyMessage` target changes and panel transitions (`headerPanel`, `footerPanel`, `previewPanel`, `lockedBottomPadding`, `isActiveStreaming`). The snippet above shows the three primary mode flags for brevity — if you subclass or wrap the composer, copy the full predicate from `cometchat_message_composer.dart` so edit/reply targets and panels also trigger rebuilds.
|
|
199
|
-
|
|
200
|
-
## CometChatMessageHeader
|
|
201
|
-
|
|
202
|
-
Shows user/group info, typing indicators, and optional call buttons.
|
|
203
|
-
|
|
204
|
-
```dart
|
|
205
|
-
CometChatMessageHeader(
|
|
206
|
-
user: user,
|
|
207
|
-
group: group,
|
|
208
|
-
onBack: () => Navigator.pop(context),
|
|
209
|
-
hideVideoCallButton: false,
|
|
210
|
-
hideVoiceCallButton: false,
|
|
211
|
-
usersStatusVisibility: true,
|
|
212
|
-
trailingView: (user, group, ctx) => [
|
|
213
|
-
IconButton(icon: Icon(Icons.info_outline), onPressed: () { /* ... */ }),
|
|
214
|
-
],
|
|
215
|
-
messageHeaderStyle: CometChatMessageHeaderStyle(
|
|
216
|
-
backgroundColor: colorPalette.background1,
|
|
217
|
-
),
|
|
218
|
-
)
|
|
219
|
-
```
|
|
220
|
-
|
|
221
|
-
## Keyboard-Aware Spacing
|
|
222
|
-
|
|
223
|
-
The composer coordinates with the keyboard internally — it tracks the native keyboard height and **clamps it to Flutter's `viewInsets`** (kit fix ENG-34434) so it does NOT add its own inset on top of the Scaffold's. The list's spacing then reacts to the same `viewInsets`:
|
|
224
|
-
- At bottom: keyboard pushes list up (normal behavior)
|
|
225
|
-
- Scrolled up: list stays still, only composer moves
|
|
226
|
-
- Safe area: only added when keyboard is closed
|
|
227
|
-
|
|
228
|
-
Because of that clamp, **set `resizeToAvoidBottomInset: true`** (or omit it — `true` is the Scaffold default), which is exactly what the kit's official sample app does (`messages_screen.dart` omits it → defaults `true`; `thread_screen.dart` sets it `true` explicitly).
|
|
229
|
-
|
|
230
|
-
> Version note: on kits **before ENG-34434 (pre-6.0.1)** the composer did NOT clamp, so `true` double-compensated and `false` was the workaround. On `^6.0.1` (what this skill targets) `true` is correct. If you ever see a double keyboard gap, you're on an older kit — upgrade, or set `false` as a stopgap.
|
|
231
|
-
|
|
232
|
-
## Message Bubbles
|
|
233
|
-
|
|
234
|
-
| Type | Widget | Key Features |
|
|
235
|
-
|------|--------|--------------|
|
|
236
|
-
| Text | `CometChatTextBubble` | Rich text, links, markdown |
|
|
237
|
-
| Image | `CometChatImageBubble` | Local/network, GIF, HEIC fallback |
|
|
238
|
-
| Video | `CometChatVideoBubble` | Thumbnail, play overlay |
|
|
239
|
-
| Audio | `CometChatAudioBubble` | Waveform, play/pause, duration |
|
|
240
|
-
| File | `CometChatFileBubble` | Type icon, download, size |
|
|
241
|
-
| Deleted | `CometChatDeletedBubble` | "Message was deleted" |
|
|
242
|
-
|
|
243
|
-
All bubble widgets accept optional `colorPalette`, `spacing`, `typography` params for the hybrid theme caching pattern.
|
|
244
|
-
|
|
245
|
-
## Sending Messages
|
|
246
|
-
|
|
247
|
-
```dart
|
|
248
|
-
// Text message
|
|
249
|
-
await CometChatUIKit.sendTextMessage(
|
|
250
|
-
TextMessage(
|
|
251
|
-
text: 'Hello!',
|
|
252
|
-
receiverUid: user.uid,
|
|
253
|
-
receiverType: ReceiverTypeConstants.user,
|
|
254
|
-
),
|
|
255
|
-
);
|
|
256
|
-
|
|
257
|
-
// Media message
|
|
258
|
-
await CometChatUIKit.sendMediaMessage(
|
|
259
|
-
MediaMessage(
|
|
260
|
-
file: '/path/to/image.jpg',
|
|
261
|
-
type: MessageTypeConstants.image,
|
|
262
|
-
receiverUid: user.uid,
|
|
263
|
-
receiverType: ReceiverTypeConstants.user,
|
|
264
|
-
),
|
|
265
|
-
);
|
|
266
|
-
|
|
267
|
-
// Custom message
|
|
268
|
-
await CometChatUIKit.sendCustomMessage(
|
|
269
|
-
CustomMessage(
|
|
270
|
-
type: 'location',
|
|
271
|
-
receiverUid: user.uid,
|
|
272
|
-
receiverType: ReceiverTypeConstants.user,
|
|
273
|
-
customData: {'latitude': 37.7749, 'longitude': -122.4194},
|
|
274
|
-
),
|
|
275
|
-
);
|
|
276
|
-
```
|
|
277
|
-
|
|
278
|
-
## Thread Replies
|
|
279
|
-
|
|
280
|
-
```dart
|
|
281
|
-
CometChatMessageList(
|
|
282
|
-
onThreadRepliesClick: (message, ctx, {template}) {
|
|
283
|
-
final colorPalette = CometChatThemeHelper.getColorPalette(context);
|
|
284
|
-
Navigator.push(context, MaterialPageRoute(
|
|
285
|
-
builder: (_) => Scaffold(
|
|
286
|
-
resizeToAvoidBottomInset: true,
|
|
287
|
-
body: SafeArea(
|
|
288
|
-
child: Container(
|
|
289
|
-
color: colorPalette.background3,
|
|
290
|
-
child: Column(
|
|
291
|
-
children: [
|
|
292
|
-
CometChatThreadedHeader(
|
|
293
|
-
parentMessage: message,
|
|
294
|
-
loggedInUser: CometChatUIKit.loggedInUser!,
|
|
295
|
-
),
|
|
296
|
-
Expanded(child: CometChatMessageList(
|
|
297
|
-
user: user, group: group,
|
|
298
|
-
parentMessageId: message.id,
|
|
299
|
-
// Scope the list to this thread only: exclude the parent and
|
|
300
|
-
// request just the replies for message.id.
|
|
301
|
-
withParent: false,
|
|
302
|
-
messagesRequestBuilder: MessagesRequestBuilder()
|
|
303
|
-
..parentMessageId = message.id,
|
|
304
|
-
)),
|
|
305
|
-
CometChatMessageComposer(
|
|
306
|
-
user: user, group: group,
|
|
307
|
-
parentMessageId: message.id,
|
|
308
|
-
),
|
|
309
|
-
],
|
|
310
|
-
),
|
|
311
|
-
),
|
|
312
|
-
),
|
|
313
|
-
),
|
|
314
|
-
));
|
|
315
|
-
},
|
|
316
|
-
)
|
|
317
|
-
```
|
|
318
|
-
|
|
319
|
-
## Gotchas
|
|
320
|
-
|
|
321
|
-
- Use `resizeToAvoidBottomInset: true` (or omit — it's the default), matching the kit sample app. On `^6.0.1` the composer clamps the keyboard height to Flutter's `viewInsets` (ENG-34434), so `true` does NOT double-compensate. Only on pre-6.0.1 kits did `true` cause a double keyboard gap (where `false` was the workaround) — if you see that gap, upgrade the kit.
|
|
322
|
-
- `textFormatters` should be the same list for both `CometChatMessageList` and `CometChatMessageComposer` to ensure consistent rendering.
|
|
323
|
-
- The rich text system has 3 implementations but only WYSIWYG is active at runtime. Bug fixes go in `rich_text_editing_controller.dart`, not the clean architecture module.
|
|
324
|
-
- `goToMessageId` loads messages around that ID, not from the beginning. The list may not have older messages loaded.
|
|
325
|
-
- Keep mutable `_user`/`_group` copies in your State class and update them from SDK listeners. Passing `widget.user`/`widget.group` directly means stale data after block/kick events.
|
|
326
|
-
- The CometChat SDK has an `Action` class (a `BaseMessage` subclass used in group events like kick/ban/scope-change). It conflicts with Flutter's built-in `Action` widget. If your messages screen uses SDK listener mixins that reference `Action`, use an import alias:
|
|
327
|
-
```dart
|
|
328
|
-
import 'package:cometchat_chat_uikit/cometchat_chat_uikit.dart' as cc;
|
|
329
|
-
// Then use: cc.Action instead of Action
|
|
330
|
-
```
|
|
331
|
-
This is especially common when mixing `GroupListener` into a messages screen State class.
|
|
332
|
-
|
|
333
|
-
## Anti-Patterns
|
|
334
|
-
|
|
335
|
-
```dart
|
|
336
|
-
// ❌ WRONG — list not wrapped in Expanded (unbounded height → won't scroll / overflow)
|
|
337
|
-
Scaffold(
|
|
338
|
-
body: Column(children: [
|
|
339
|
-
CometChatMessageList(user: user), // needs Expanded
|
|
340
|
-
CometChatMessageComposer(user: user),
|
|
341
|
-
]),
|
|
342
|
-
)
|
|
343
|
-
|
|
344
|
-
// ✅ CORRECT — both messages and thread screens (matches the kit sample app)
|
|
345
|
-
Scaffold(
|
|
346
|
-
resizeToAvoidBottomInset: true, // (or omit — true is the default; composer clamps to viewInsets, ENG-34434)
|
|
347
|
-
body: Column(children: [
|
|
348
|
-
Expanded(child: CometChatMessageList(user: user)),
|
|
349
|
-
CometChatMessageComposer(user: user),
|
|
350
|
-
]),
|
|
351
|
-
)
|
|
352
|
-
```
|
|
353
|
-
|
|
354
|
-
```dart
|
|
355
|
-
// ❌ WRONG — passing immutable widget params to UIKit components
|
|
356
|
-
CometChatMessageList(user: widget.user) // Stale after block/unblock
|
|
357
|
-
|
|
358
|
-
// ✅ CORRECT — mutable state copy
|
|
359
|
-
late User? _user = widget.user;
|
|
360
|
-
// Update _user from SDK listeners
|
|
361
|
-
CometChatMessageList(user: _user)
|
|
362
|
-
```
|
|
363
|
-
|
|
364
|
-
```dart
|
|
365
|
-
// ❌ WRONG — different formatters for list and composer
|
|
366
|
-
CometChatMessageList(textFormatters: [MarkdownTextFormatter()])
|
|
367
|
-
CometChatMessageComposer(textFormatters: []) // Inconsistent rendering
|
|
368
|
-
|
|
369
|
-
// ✅ CORRECT — same formatters
|
|
370
|
-
final formatters = [CometChatMentionsFormatter(user: user), MarkdownTextFormatter()];
|
|
371
|
-
CometChatMessageList(textFormatters: formatters)
|
|
372
|
-
CometChatMessageComposer(textFormatters: formatters)
|
|
373
|
-
```
|
|
374
|
-
|
|
375
|
-
## Checklist
|
|
376
|
-
|
|
377
|
-
- [ ] Scaffold has `resizeToAvoidBottomInset: true` (or omitted — default; matches the sample app)
|
|
378
|
-
- [ ] Both list and composer have matching `textFormatters`
|
|
379
|
-
- [ ] Mutable `_user`/`_group` state copies, not `widget.user`/`widget.group`
|
|
380
|
-
- [ ] `onThreadRepliesClick` navigates to thread screen with `parentMessageId`
|
|
381
|
-
- [ ] Thread screen Scaffold also uses `resizeToAvoidBottomInset: true` (same as messages screen)
|
|
382
|
-
- [ ] SDK listeners update `_user`/`_group` for block/kick/scope changes
|
|
383
|
-
- [ ] Colors from `CometChatThemeHelper`, cached in `didChangeDependencies()`
|
|
384
|
-
- [ ] If using SDK listener mixins with `Action`, import UIKit `as cc` to avoid Flutter name conflict
|
|
@@ -1,293 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: cometchat-flutter-v6-theming
|
|
3
|
-
description: >
|
|
4
|
-
Use when customizing the visual appearance of CometChat Flutter UIKit v6 components.
|
|
5
|
-
Triggers on mentions of CometChatThemeHelper, CometChatColorPalette, CometChatSpacing,
|
|
6
|
-
CometChatTypography, CometChatThemeMode, dark mode, light mode, theme, colors, styling,
|
|
7
|
-
custom theme, Style class, merge(), getColorPalette, getSpacing, getTypography,
|
|
8
|
-
ThemeExtension, primary color, neutral colors, background colors, text colors, icon colors,
|
|
9
|
-
button colors, border colors, or any CometChat{Component}Style class. Also use when the
|
|
10
|
-
user asks about changing colors, fonts, spacing, or appearance of chat components.
|
|
11
|
-
license: "MIT"
|
|
12
|
-
compatibility: "cometchat_chat_uikit ^6.0.1; flutter >=2.5.0"
|
|
13
|
-
metadata:
|
|
14
|
-
author: "CometChat"
|
|
15
|
-
version: "3.0.0"
|
|
16
|
-
tags: "cometchat flutter theme colors typography spacing dark-mode styling"
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
> **Ground truth:** `cometchat_chat_uikit: ^6.0` — pub-cache source + `ui-kit/flutter`. **Official docs:** https://www.cometchat.com/docs/ui-kit/flutter/overview · **Docs MCP:** `claude mcp add --transport http cometchat-docs https://www.cometchat.com/docs/mcp` (or fetch the URL directly without MCP). Verify symbols against the installed package/source before relying on them.
|
|
20
|
-
|
|
21
|
-
# CometChat Flutter UIKit — Theming & Styling
|
|
22
|
-
|
|
23
|
-
How to customize the visual appearance of all CometChat components.
|
|
24
|
-
|
|
25
|
-
## Theme System Architecture
|
|
26
|
-
|
|
27
|
-
Three layers, resolved via Flutter's `ThemeExtension` system:
|
|
28
|
-
|
|
29
|
-
1. `CometChatColorPalette` — all colors (primary, neutral, alert, background, text, icon, button, border)
|
|
30
|
-
2. `CometChatSpacing` — spacing tokens
|
|
31
|
-
3. `CometChatTypography` — text styles (heading1-4, body, caption1-2, button, link, title)
|
|
32
|
-
|
|
33
|
-
Access via static helpers:
|
|
34
|
-
```dart
|
|
35
|
-
final colors = CometChatThemeHelper.getColorPalette(context);
|
|
36
|
-
final spacing = CometChatThemeHelper.getSpacing(context);
|
|
37
|
-
final typography = CometChatThemeHelper.getTypography(context);
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
## Applying a Custom Theme
|
|
41
|
-
|
|
42
|
-
Register `CometChatColorPalette` as a `ThemeExtension` on your `ThemeData`:
|
|
43
|
-
|
|
44
|
-
```dart
|
|
45
|
-
MaterialApp(
|
|
46
|
-
theme: ThemeData(
|
|
47
|
-
brightness: Brightness.light,
|
|
48
|
-
extensions: [
|
|
49
|
-
CometChatColorPalette(
|
|
50
|
-
primary: const Color(0xFF6852D6),
|
|
51
|
-
background1: Colors.white,
|
|
52
|
-
textPrimary: const Color(0xFF141414),
|
|
53
|
-
// ... override only what you need, rest falls back to defaults
|
|
54
|
-
),
|
|
55
|
-
],
|
|
56
|
-
),
|
|
57
|
-
darkTheme: ThemeData(
|
|
58
|
-
brightness: Brightness.dark,
|
|
59
|
-
extensions: [
|
|
60
|
-
CometChatColorPalette(
|
|
61
|
-
primary: const Color(0xFF604CC3),
|
|
62
|
-
background1: const Color(0xFF141414),
|
|
63
|
-
textPrimary: Colors.white,
|
|
64
|
-
),
|
|
65
|
-
],
|
|
66
|
-
),
|
|
67
|
-
)
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
Note: `CometChatColorPalette` does NOT have a `const` constructor (it has mutable default fields for `white`, `black`, `transparent`). Don't try `const CometChatColorPalette(...)` — it won't compile.
|
|
71
|
-
|
|
72
|
-
## Dark Mode
|
|
73
|
-
|
|
74
|
-
`CometChatThemeMode` controls how brightness is resolved:
|
|
75
|
-
|
|
76
|
-
```dart
|
|
77
|
-
// Follow system setting (default)
|
|
78
|
-
CometChatThemeMode.mode = ThemeMode.system;
|
|
79
|
-
|
|
80
|
-
// Force light
|
|
81
|
-
CometChatThemeMode.mode = ThemeMode.light;
|
|
82
|
-
|
|
83
|
-
// Force dark
|
|
84
|
-
CometChatThemeMode.mode = ThemeMode.dark;
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
The helper reads brightness via:
|
|
88
|
-
```dart
|
|
89
|
-
// ThemeMode.system → MediaQuery.of(context).platformBrightness
|
|
90
|
-
// ThemeMode.light → Brightness.light
|
|
91
|
-
// ThemeMode.dark → Brightness.dark
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
## Color Palette Tokens
|
|
95
|
-
|
|
96
|
-
| Category | Tokens | Default Source |
|
|
97
|
-
|----------|--------|---------------|
|
|
98
|
-
| Primary | `primary` | `#6852D6` light / `#604CC3` dark |
|
|
99
|
-
| Extended Primary | `extendedPrimary50`–`900` | Auto-generated from primary via blend |
|
|
100
|
-
| Neutral | `neutral50`–`900` | 10-shade grayscale |
|
|
101
|
-
| Alert | `info`, `warning`, `error`, `success`, `error100` | Semantic colors |
|
|
102
|
-
| Background | `background1`–`4` | Mapped from neutral shades |
|
|
103
|
-
| Text | `textPrimary`, `textSecondary`, `textTertiary`, `textDisabled`, `textWhite`, `textHighlight` | Mapped from neutral/primary |
|
|
104
|
-
| Icon | `iconPrimary`, `iconSecondary`, `iconTertiary`, `iconWhite`, `iconHighlight` | Mapped from neutral/primary |
|
|
105
|
-
| Button | `buttonBackground`, `secondaryButtonBackground`, `buttonText`, `buttonIconColor`, `secondaryButtonText`, `secondaryButtonIcon` | Primary + neutral |
|
|
106
|
-
| Border | `borderLight`, `borderDefault`, `borderDark`, `borderHighlight` | Neutral shades + primary |
|
|
107
|
-
| Special | `white`, `black`, `messageSeen` | Fixed values |
|
|
108
|
-
|
|
109
|
-
## Component Style Classes
|
|
110
|
-
|
|
111
|
-
Every component has a `CometChat{Component}Style` class with a `merge()` method:
|
|
112
|
-
|
|
113
|
-
```dart
|
|
114
|
-
CometChatConversations(
|
|
115
|
-
conversationsStyle: CometChatConversationsStyle(
|
|
116
|
-
backgroundColor: colors.background1,
|
|
117
|
-
titleTextStyle: typography.heading3?.bold,
|
|
118
|
-
),
|
|
119
|
-
)
|
|
120
|
-
|
|
121
|
-
CometChatMessageList(
|
|
122
|
-
style: CometChatMessageListStyle(
|
|
123
|
-
backgroundColor: colors.background3,
|
|
124
|
-
),
|
|
125
|
-
)
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
Style classes support `merge()` for combining defaults with overrides:
|
|
129
|
-
```dart
|
|
130
|
-
final baseStyle = CometChatConversationsStyle(backgroundColor: Colors.white);
|
|
131
|
-
final override = CometChatConversationsStyle(titleTextStyle: myTitleStyle);
|
|
132
|
-
final merged = baseStyle.merge(override); // backgroundColor + titleTextStyle
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
## Theme Caching (Performance-Critical)
|
|
136
|
-
|
|
137
|
-
Cache theme in `didChangeDependencies()` — never in `build()`:
|
|
138
|
-
|
|
139
|
-
> **Trade-off (vs the Flutter V5 theming skill, which forbids this flag):** the
|
|
140
|
-
> `_themeInitialized` guard caches the palette once and skips re-reads on every
|
|
141
|
-
> `didChangeDependencies()` (e.g. keyboard animations) — but it also means a
|
|
142
|
-
> runtime **system light↔dark switch won't re-resolve** the cached palette. If
|
|
143
|
-
> your app supports live theme switching, either drop the flag (re-read every
|
|
144
|
-
> call, as V5 recommends) or also invalidate it from `didChangePlatformBrightness`.
|
|
145
|
-
> The flag is the right default for apps with a fixed theme mode.
|
|
146
|
-
|
|
147
|
-
```dart
|
|
148
|
-
class _MyWidgetState extends State<MyWidget> {
|
|
149
|
-
late CometChatColorPalette _colorPalette;
|
|
150
|
-
bool _themeInitialized = false;
|
|
151
|
-
|
|
152
|
-
@override
|
|
153
|
-
void didChangeDependencies() {
|
|
154
|
-
super.didChangeDependencies();
|
|
155
|
-
if (!_themeInitialized) {
|
|
156
|
-
_colorPalette = CometChatThemeHelper.getColorPalette(context);
|
|
157
|
-
_themeInitialized = true;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
@override
|
|
162
|
-
Widget build(BuildContext context) {
|
|
163
|
-
return Container(color: _colorPalette.primary); // Cached, no lookup
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
For child widgets that receive theme from parent (hybrid pattern):
|
|
169
|
-
```dart
|
|
170
|
-
class CometChatImageBubble extends StatefulWidget {
|
|
171
|
-
final CometChatColorPalette? colorPalette; // Optional — parent can pass cached value
|
|
172
|
-
// ...
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
class _CometChatImageBubbleState extends State<CometChatImageBubble> {
|
|
176
|
-
late CometChatColorPalette colorPalette;
|
|
177
|
-
bool _themeInitialized = false;
|
|
178
|
-
|
|
179
|
-
@override
|
|
180
|
-
void didChangeDependencies() {
|
|
181
|
-
super.didChangeDependencies();
|
|
182
|
-
if (!_themeInitialized) {
|
|
183
|
-
colorPalette = widget.colorPalette ?? CometChatThemeHelper.getColorPalette(context);
|
|
184
|
-
_themeInitialized = true;
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
@override
|
|
189
|
-
void didUpdateWidget(CometChatImageBubble oldWidget) {
|
|
190
|
-
super.didUpdateWidget(oldWidget);
|
|
191
|
-
if (widget.colorPalette != oldWidget.colorPalette && widget.colorPalette != null) {
|
|
192
|
-
colorPalette = widget.colorPalette!;
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
## Localization
|
|
199
|
-
|
|
200
|
-
To translate the UI, switch the active language, or override individual strings, route to the dedicated **`cometchat-i18n`** skill — the canonical cross-family localization reference. Flutter has **no `CometChatLocalize` class**: localization is wired via the kit's `Translations` localization delegate on `MaterialApp` (drive the language through the app `Locale`). `cometchat-i18n` covers bundled languages, custom translations, RTL, and date/time formatting. Docs: https://www.cometchat.com/docs/ui-kit/flutter/localize
|
|
201
|
-
|
|
202
|
-
## Sound Manager — custom notification & call sounds
|
|
203
|
-
|
|
204
|
-
Sounds are a **behavioral** customization — driven by `SoundManager` (note: `SoundManager`, NOT `CometChatSoundManager`, and the stop method is `stop()`, NOT `pause()`). The UI Kit plays the built-in cues automatically; use this to override a cue with a custom asset.
|
|
205
|
-
|
|
206
|
-
```dart
|
|
207
|
-
import 'package:cometchat_chat_uikit/cometchat_chat_uikit.dart';
|
|
208
|
-
|
|
209
|
-
// Play a default cue — Sound: incomingMessage | outgoingMessage
|
|
210
|
-
// | incomingMessageFromOther | incomingCall | outgoingCall
|
|
211
|
-
SoundManager().play(sound: Sound.incomingMessage);
|
|
212
|
-
|
|
213
|
-
// Override with a custom asset
|
|
214
|
-
SoundManager().play(sound: Sound.outgoingMessage, customSound: "assets/sound/my_ping.wav");
|
|
215
|
-
|
|
216
|
-
// Stop whatever is playing
|
|
217
|
-
SoundManager().stop();
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
> For the common case (muting/replacing message sounds), prefer the **widget-level** props instead of the manager: in V6 `CometChatConversations` exposes `disableSoundForMessages` and `customSoundForMessages`.
|
|
221
|
-
|
|
222
|
-
## Gotchas
|
|
223
|
-
|
|
224
|
-
- `CometChatColorPalette` is NOT const-constructible. It has mutable default fields (`white = Colors.white`, `black = Colors.black`, `transparent = Colors.transparent`). Writing `const CometChatColorPalette(...)` or `const [CometChatColorPalette()]` won't compile.
|
|
225
|
-
- `CometChatThemeHelper.getColorPalette(context)` does `Theme.of(context).extension<CometChatColorPalette>()` internally — this is an InheritedWidget lookup. In `build()` during keyboard animation, this fires every frame causing 44-95ms build times.
|
|
226
|
-
- Extended primary colors are auto-generated by blending `primary` with white (light) or black (dark). Override individual shades only if the auto-blend doesn't match your brand.
|
|
227
|
-
- `CometChatThemeMode.mode` is a static field — changing it doesn't trigger rebuilds. You need to also change `ThemeData` brightness or call `setState` on the `MaterialApp`.
|
|
228
|
-
- Style `merge()` is null-aware: only non-null fields from the override replace the base. This means you can't explicitly set a field to `null` via merge.
|
|
229
|
-
|
|
230
|
-
## Anti-Patterns
|
|
231
|
-
|
|
232
|
-
```dart
|
|
233
|
-
// ❌ WRONG — hardcoded colors
|
|
234
|
-
Container(color: Colors.purple)
|
|
235
|
-
|
|
236
|
-
// ✅ CORRECT — use theme tokens
|
|
237
|
-
Container(color: colorPalette.primary)
|
|
238
|
-
```
|
|
239
|
-
|
|
240
|
-
```dart
|
|
241
|
-
// ❌ WRONG — theme lookup in build
|
|
242
|
-
@override
|
|
243
|
-
Widget build(BuildContext context) {
|
|
244
|
-
final colors = CometChatThemeHelper.getColorPalette(context);
|
|
245
|
-
return Text('Hi', style: TextStyle(color: colors.textPrimary));
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
// ❌ ALSO WRONG — theme lookup in a method called from build
|
|
249
|
-
Widget _buildProfileMenu() {
|
|
250
|
-
final typography = CometChatThemeHelper.getTypography(context); // Still in build tree!
|
|
251
|
-
final spacing = CometChatThemeHelper.getSpacing(context);
|
|
252
|
-
// ...
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
// ✅ CORRECT — cached in didChangeDependencies
|
|
256
|
-
late CometChatColorPalette _colors;
|
|
257
|
-
late CometChatTypography _typography;
|
|
258
|
-
late CometChatSpacing _spacing;
|
|
259
|
-
bool _init = false;
|
|
260
|
-
@override
|
|
261
|
-
void didChangeDependencies() {
|
|
262
|
-
super.didChangeDependencies();
|
|
263
|
-
if (!_init) {
|
|
264
|
-
_colors = CometChatThemeHelper.getColorPalette(context);
|
|
265
|
-
_typography = CometChatThemeHelper.getTypography(context);
|
|
266
|
-
_spacing = CometChatThemeHelper.getSpacing(context);
|
|
267
|
-
_init = true;
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
@override
|
|
271
|
-
Widget build(BuildContext context) {
|
|
272
|
-
return Text('Hi', style: TextStyle(color: _colors.textPrimary));
|
|
273
|
-
}
|
|
274
|
-
```
|
|
275
|
-
|
|
276
|
-
```dart
|
|
277
|
-
// ❌ WRONG — MediaQuery.of(context).size triggers full rebuild
|
|
278
|
-
final size = MediaQuery.of(context).size;
|
|
279
|
-
|
|
280
|
-
// ✅ CORRECT — only subscribes to size changes
|
|
281
|
-
final size = MediaQuery.sizeOf(context);
|
|
282
|
-
```
|
|
283
|
-
|
|
284
|
-
## Checklist
|
|
285
|
-
|
|
286
|
-
- [ ] Custom colors registered as `ThemeExtension` on `ThemeData`
|
|
287
|
-
- [ ] Both `theme` and `darkTheme` configured if supporting dark mode
|
|
288
|
-
- [ ] Theme values cached in `didChangeDependencies()`, not `build()`
|
|
289
|
-
- [ ] No `CometChatThemeHelper.get*()` calls in any method invoked during `build()` (including helper methods like `_buildProfileMenu()`)
|
|
290
|
-
- [ ] `_themeInitialized` flag prevents re-init during keyboard animation
|
|
291
|
-
- [ ] No hardcoded colors — all from `CometChatColorPalette`
|
|
292
|
-
- [ ] `MediaQuery.sizeOf(context)` used instead of `MediaQuery.of(context).size`
|
|
293
|
-
- [ ] Style overrides use component's Style class, not inline styles
|