@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,738 +1,96 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: cometchat-flutter-v6-customization
|
|
3
|
-
description:
|
|
4
|
-
Customize CometChat Flutter UIKit v6 beyond defaults — four tiers: props/view slots,
|
|
5
|
-
request builders, text formatters + message templates, and BubbleFactory/DataSource.
|
|
6
|
-
Use when the user wants custom bubbles, custom headers, custom list items, custom
|
|
7
|
-
message actions, or custom message types.
|
|
3
|
+
description: "Theme and brand the Flutter v6 UI Kit — light/dark mode, the CometChatColorPalette / CometChatTypography / CometChatSpacing theme extensions, per-widget style objects, and view slots. Triggers: 'change chat colors flutter', 'dark mode chat flutter', 'match my brand flutter', 'customize cometchat theme flutter', 'override message bubble styles'."
|
|
8
4
|
license: "MIT"
|
|
9
|
-
compatibility: "cometchat_chat_uikit ^6.
|
|
5
|
+
compatibility: "Flutter >=3.38.9; cometchat_chat_uikit ^6 (6.1.x, verified 6.1.0)"
|
|
10
6
|
metadata:
|
|
11
7
|
author: "CometChat"
|
|
12
|
-
version: "
|
|
13
|
-
tags: "cometchat flutter customization
|
|
8
|
+
version: "1.0.0"
|
|
9
|
+
tags: "cometchat flutter customization theming theme-extension styles v6"
|
|
14
10
|
---
|
|
15
11
|
|
|
16
|
-
> **Ground truth:**
|
|
12
|
+
> **Ground truth:** theming is Flutter's own `ThemeExtension` mechanism — `CometChatColorPalette`, `CometChatTypography`, `CometChatSpacing`, all catalog-verified against 6.1.0. The exhaustive token list is FETCHED from the docs (`theme-introduction` · `color-resources` · `component-styling` · `message-bubble-styling` via `../cometchat-flutter-v6-core/references/docs-map.md`) — do NOT bake it.
|
|
17
13
|
|
|
18
|
-
|
|
14
|
+
## Companion skills (read first)
|
|
15
|
+
- `cometchat-flutter-v6-core` — install, credentials, `init→login→render`. This skill ASSUMES it.
|
|
16
|
+
- `cometchat-flutter-v6-components` — the widget catalog whose style objects and slots this skill sets.
|
|
19
17
|
|
|
20
|
-
|
|
18
|
+
## Use this skill when
|
|
19
|
+
Branding or theming: colors, fonts, light/dark, or per-widget style overrides.
|
|
21
20
|
|
|
22
|
-
##
|
|
21
|
+
## Prerequisites & install
|
|
22
|
+
Covered by core. No new package.
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
| 1 | Props & View Slots | Per-component UI overrides | Custom list items, subtitles, trailing widgets, headers |
|
|
27
|
-
| 2 | Request Builders | Data filtering & pagination | Filter conversations, users, groups, messages, group members |
|
|
28
|
-
| 3 | Text Formatters & Message Templates | Message rendering & actions | Custom text styling, custom long-press options, custom bubble slots |
|
|
29
|
-
| 4 | BubbleFactory & DataSource | New message types | Location bubbles, poll bubbles, any custom `category_type` |
|
|
30
|
-
|
|
31
|
-
Start at Tier 1. Move deeper only when the lighter tier can't solve the problem.
|
|
32
|
-
|
|
33
|
-
## 2. Tier 1: Props & View Slots
|
|
34
|
-
|
|
35
|
-
Every list-based component exposes view slot callbacks that let you replace individual parts of each list item without rebuilding the entire widget.
|
|
36
|
-
|
|
37
|
-
### CometChatConversations
|
|
38
|
-
|
|
39
|
-
```dart
|
|
40
|
-
CometChatConversations(
|
|
41
|
-
// Replace the entire list item
|
|
42
|
-
listItemView: (Conversation conversation) => MyCustomConversationTile(conversation),
|
|
43
|
-
|
|
44
|
-
// Replace individual slots
|
|
45
|
-
subtitleView: (BuildContext context, Conversation conversation) {
|
|
46
|
-
final last = conversation.lastMessage;
|
|
47
|
-
final preview = last is TextMessage ? last.text : '';
|
|
48
|
-
return Text(preview);
|
|
49
|
-
},
|
|
50
|
-
trailingView: (Conversation conversation) =>
|
|
51
|
-
Icon(Icons.chevron_right),
|
|
52
|
-
leadingView: (BuildContext context, Conversation conversation) =>
|
|
53
|
-
CircleAvatar(child: Text(conversation.conversationWith?.name?[0] ?? '')),
|
|
54
|
-
titleView: (BuildContext context, Conversation conversation) =>
|
|
55
|
-
Text(conversation.conversationWith?.name ?? '', style: TextStyle(fontWeight: FontWeight.bold)),
|
|
56
|
-
|
|
57
|
-
// State views
|
|
58
|
-
emptyStateView: (context) => Center(child: Text('No conversations yet')),
|
|
59
|
-
errorStateView: (context) => Center(child: Text('Something went wrong')),
|
|
60
|
-
loadingStateView: (context) => Center(child: CircularProgressIndicator()),
|
|
61
|
-
)
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
### CometChatUsers
|
|
65
|
-
|
|
66
|
-
```dart
|
|
67
|
-
CometChatUsers(
|
|
68
|
-
listItemView: (User user) => MyCustomUserTile(user),
|
|
69
|
-
subtitleView: (BuildContext context, User user) => Text(user.status ?? ''),
|
|
70
|
-
trailingView: (BuildContext context, User user) => Icon(Icons.message),
|
|
71
|
-
leadingView: (BuildContext context, User user) => CometChatAvatar(name: user.name),
|
|
72
|
-
titleView: (BuildContext context, User user) => Text(user.name),
|
|
73
|
-
)
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
### CometChatGroups
|
|
77
|
-
|
|
78
|
-
```dart
|
|
79
|
-
CometChatGroups(
|
|
80
|
-
listItemView: (Group group) => MyCustomGroupTile(group),
|
|
81
|
-
subtitleView: (BuildContext context, Group group) =>
|
|
82
|
-
Text('${group.membersCount} members'),
|
|
83
|
-
trailingView: (BuildContext context, Group group) => Icon(Icons.arrow_forward),
|
|
84
|
-
leadingView: (BuildContext context, Group group) => CometChatAvatar(name: group.name),
|
|
85
|
-
titleView: (BuildContext context, Group group) => Text(group.name),
|
|
86
|
-
)
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
### CometChatMessageHeader
|
|
90
|
-
|
|
91
|
-
```dart
|
|
92
|
-
CometChatMessageHeader(
|
|
93
|
-
user: user,
|
|
94
|
-
group: group,
|
|
95
|
-
subtitleView: (Group? group, User? user, BuildContext context) =>
|
|
96
|
-
Text('Custom subtitle'),
|
|
97
|
-
trailingView: (User? user, Group? group, BuildContext context) => [
|
|
98
|
-
IconButton(icon: Icon(Icons.search), onPressed: () {}),
|
|
99
|
-
IconButton(icon: Icon(Icons.info_outline), onPressed: () {}),
|
|
100
|
-
],
|
|
101
|
-
listItemView: (Group? group, User? user, BuildContext context) =>
|
|
102
|
-
MyCustomHeaderWidget(user: user, group: group),
|
|
103
|
-
titleView: null, // use default
|
|
104
|
-
leadingStateView: null, // use default
|
|
105
|
-
)
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
### CometChatMessageList
|
|
109
|
-
|
|
110
|
-
```dart
|
|
111
|
-
CometChatMessageList(
|
|
112
|
-
user: user,
|
|
113
|
-
group: group,
|
|
114
|
-
headerView: (context, {user, group, parentMessageId}) => MyCustomListHeader(),
|
|
115
|
-
footerView: (context, {user, group, parentMessageId}) => MyCustomListFooter(),
|
|
116
|
-
emptyStateView: (context) => Center(child: Text('Start a conversation')),
|
|
117
|
-
emptyChatGreetingView: (context) => WelcomeWidget(),
|
|
118
|
-
loadingStateView: (context) => ShimmerList(),
|
|
119
|
-
errorStateView: (context) => RetryWidget(),
|
|
120
|
-
)
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
### CometChatMessageComposer
|
|
124
|
-
|
|
125
|
-
```dart
|
|
126
|
-
CometChatMessageComposer(
|
|
127
|
-
user: user,
|
|
128
|
-
group: group,
|
|
129
|
-
headerView: (context, user, group, id) => ReplyPreviewBanner(),
|
|
130
|
-
footerView: (context, user, group, id) => SuggestedActionsBar(),
|
|
131
|
-
auxiliaryButtonView: (context, user, group, id) =>
|
|
132
|
-
IconButton(icon: Icon(Icons.gif), onPressed: () {}),
|
|
133
|
-
secondaryButtonView: (context, user, group, id) =>
|
|
134
|
-
IconButton(icon: Icon(Icons.attach_file), onPressed: () {}),
|
|
135
|
-
sendButtonView: Icon(Icons.send, color: Colors.blue),
|
|
136
|
-
)
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
## 3. Tier 2: Request Builders
|
|
140
|
-
|
|
141
|
-
Override the SDK request builder to control what data is fetched.
|
|
142
|
-
|
|
143
|
-
### ConversationsRequestBuilder
|
|
144
|
-
|
|
145
|
-
```dart
|
|
146
|
-
CometChatConversations(
|
|
147
|
-
conversationsRequestBuilder: ConversationsRequestBuilder()
|
|
148
|
-
..limit = 30
|
|
149
|
-
..conversationType = ConversationType.user // only 1-on-1 chats
|
|
150
|
-
..withTags = true
|
|
151
|
-
..tags = ['vip'],
|
|
152
|
-
)
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
### MessagesRequestBuilder
|
|
156
|
-
|
|
157
|
-
```dart
|
|
158
|
-
CometChatMessageList(
|
|
159
|
-
user: user,
|
|
160
|
-
messagesRequestBuilder: MessagesRequestBuilder()
|
|
161
|
-
..uid = user.uid
|
|
162
|
-
..limit = 50
|
|
163
|
-
..hideDeleted = true
|
|
164
|
-
..searchKeyword = 'invoice'
|
|
165
|
-
..categories = [MessageCategoryConstants.message]
|
|
166
|
-
..types = [MessageTypeConstants.text, MessageTypeConstants.image],
|
|
167
|
-
)
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
### UsersRequestBuilder
|
|
171
|
-
|
|
172
|
-
```dart
|
|
173
|
-
CometChatUsers(
|
|
174
|
-
usersRequestBuilder: UsersRequestBuilder()
|
|
175
|
-
..limit = 30
|
|
176
|
-
..friendsOnly = true
|
|
177
|
-
..searchKeyword = 'john'
|
|
178
|
-
..roles = ['admin', 'moderator'],
|
|
179
|
-
)
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
### GroupsRequestBuilder
|
|
183
|
-
|
|
184
|
-
```dart
|
|
185
|
-
CometChatGroups(
|
|
186
|
-
groupsRequestBuilder: GroupsRequestBuilder()
|
|
187
|
-
..limit = 30
|
|
188
|
-
..joinedOnly = true
|
|
189
|
-
..searchKeyword = 'team'
|
|
190
|
-
..withTags = true
|
|
191
|
-
..tags = ['project-alpha'],
|
|
192
|
-
)
|
|
193
|
-
```
|
|
194
|
-
|
|
195
|
-
### GroupMembersRequestBuilder
|
|
196
|
-
|
|
197
|
-
```dart
|
|
198
|
-
CometChatGroupMembers(
|
|
199
|
-
group: group,
|
|
200
|
-
groupMembersRequestBuilder: GroupMembersRequestBuilder(group.guid)
|
|
201
|
-
..limit = 30
|
|
202
|
-
..scopes = [CometChatMemberScope.admin, CometChatMemberScope.moderator],
|
|
203
|
-
)
|
|
204
|
-
```
|
|
205
|
-
|
|
206
|
-
## 4. Tier 3: Text Formatters & Message Templates
|
|
207
|
-
|
|
208
|
-
### Text Formatters
|
|
209
|
-
|
|
210
|
-
`CometChatTextFormatter` is the abstract base class. Subclass it to create custom text styling in both the message list and the composer.
|
|
211
|
-
|
|
212
|
-
Built-in formatters:
|
|
213
|
-
|
|
214
|
-
| Formatter | Purpose |
|
|
215
|
-
|-----------|---------|
|
|
216
|
-
| `CometChatMentionsFormatter` | @mention users with suggestion list |
|
|
217
|
-
| `MarkdownTextFormatter` | Bold, italic, strikethrough, code, links, lists |
|
|
218
|
-
| `CometChatUrlFormatter` | Clickable URLs |
|
|
219
|
-
| `CometChatPhoneNumberFormatter` | Clickable phone numbers |
|
|
220
|
-
| `CometChatEmailFormatter` | Clickable email addresses |
|
|
221
|
-
|
|
222
|
-
Key properties on `CometChatTextFormatter`:
|
|
223
|
-
|
|
224
|
-
```dart
|
|
225
|
-
abstract class CometChatTextFormatter implements Formatter {
|
|
226
|
-
String? trackingCharacter; // e.g. '@' for mentions
|
|
227
|
-
RegExp? pattern; // regex to match in text
|
|
228
|
-
Function(String?)? onSearch; // called when tracking character typed
|
|
229
|
-
bool? showLoadingIndicator;
|
|
230
|
-
BaseMessage? message;
|
|
231
|
-
User? user;
|
|
232
|
-
Group? group;
|
|
233
|
-
StreamSink<List<SuggestionListItem>>? suggestionListEventSink;
|
|
234
|
-
|
|
235
|
-
void init();
|
|
236
|
-
void handlePreMessageSend(BuildContext context, BaseMessage baseMessage);
|
|
237
|
-
void onScrollToBottom(TextEditingController textEditingController);
|
|
238
|
-
void onChange(TextEditingController textEditingController, String previousText);
|
|
239
|
-
|
|
240
|
-
List<AttributedText> buildInputFieldText({...});
|
|
241
|
-
List<AttributedText> getAttributedText(String text, BuildContext context, BubbleAlignment? alignment, {...});
|
|
242
|
-
TextStyle getMessageBubbleTextStyle(BuildContext context, BubbleAlignment? alignment, {bool forConversation = false});
|
|
243
|
-
TextStyle getMessageInputTextStyle(BuildContext context);
|
|
244
|
-
}
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
Pass the same formatters to both list and composer:
|
|
248
|
-
|
|
249
|
-
```dart
|
|
250
|
-
final formatters = [
|
|
251
|
-
CometChatMentionsFormatter(user: user, group: group),
|
|
252
|
-
MarkdownTextFormatter(),
|
|
253
|
-
CometChatUrlFormatter(),
|
|
254
|
-
CometChatPhoneNumberFormatter(),
|
|
255
|
-
CometChatEmailFormatter(),
|
|
256
|
-
];
|
|
257
|
-
|
|
258
|
-
CometChatMessageList(user: user, textFormatters: formatters)
|
|
259
|
-
CometChatMessageComposer(user: user, textFormatters: formatters)
|
|
260
|
-
```
|
|
261
|
-
|
|
262
|
-
### Message Templates
|
|
263
|
-
|
|
264
|
-
`CometChatMessageTemplate` controls how a message type renders in the bubble and what long-press options appear.
|
|
265
|
-
|
|
266
|
-
```dart
|
|
267
|
-
class CometChatMessageTemplate {
|
|
268
|
-
CometChatMessageTemplate({
|
|
269
|
-
required this.type, // e.g. 'text', 'image', or 'location'
|
|
270
|
-
required this.category, // e.g. 'message' or 'custom'
|
|
271
|
-
this.bubbleView, // replaces the ENTIRE bubble
|
|
272
|
-
this.headerView, // top of bubble (sender name area)
|
|
273
|
-
this.contentView, // main content area
|
|
274
|
-
this.footerView, // below statusInfoView
|
|
275
|
-
this.bottomView, // below contentView
|
|
276
|
-
this.statusInfoView, // receipts/time area
|
|
277
|
-
this.threadView, // thread reply indicator
|
|
278
|
-
this.replyView, // quoted-reply preview area (3-arg builder, NO additionalConfigurations)
|
|
279
|
-
this.options, // long-press menu options
|
|
280
|
-
});
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
// `replyView` exists on BOTH CometChatMessageTemplate (template-level, signature
|
|
284
|
-
// `(BaseMessage, BuildContext, BubbleAlignment)`) AND on CometChatMessageBubble
|
|
285
|
-
// (the widget slot). Verified: only the clean_architecture template is exported
|
|
286
|
-
// (shared_ui/src/clean_architecture/data/models/cometchat_message_template.dart:79)
|
|
287
|
-
// — the legacy shared_ui/src/models/ copy without replyView is NOT exported.
|
|
288
|
-
```
|
|
289
|
-
|
|
290
|
-
Override templates on `CometChatMessageList`:
|
|
291
|
-
|
|
292
|
-
```dart
|
|
293
|
-
CometChatMessageList(
|
|
294
|
-
user: user,
|
|
295
|
-
// Replace all templates
|
|
296
|
-
templates: [
|
|
297
|
-
CometChatMessageTemplate(
|
|
298
|
-
type: MessageTypeConstants.text,
|
|
299
|
-
category: MessageCategoryConstants.message,
|
|
300
|
-
contentView: (message, context, alignment, {additionalConfigurations}) =>
|
|
301
|
-
MyCustomTextContent(message: message),
|
|
302
|
-
options: (loggedInUser, message, context, group, additionalConfigurations) => [
|
|
303
|
-
CometChatMessageOption(
|
|
304
|
-
id: 'bookmark',
|
|
305
|
-
title: 'Bookmark',
|
|
306
|
-
icon: Icon(Icons.bookmark_border, size: 24),
|
|
307
|
-
onItemClick: (message, state) {
|
|
308
|
-
// handle bookmark
|
|
309
|
-
},
|
|
310
|
-
),
|
|
311
|
-
],
|
|
312
|
-
),
|
|
313
|
-
],
|
|
314
|
-
// Or add templates alongside defaults
|
|
315
|
-
addTemplate: [
|
|
316
|
-
CometChatMessageTemplate(
|
|
317
|
-
type: 'location',
|
|
318
|
-
category: 'custom',
|
|
319
|
-
contentView: (message, context, alignment, {additionalConfigurations}) =>
|
|
320
|
-
LocationBubbleContent(message: message as CustomMessage),
|
|
321
|
-
),
|
|
322
|
-
],
|
|
323
|
-
)
|
|
324
|
-
```
|
|
325
|
-
|
|
326
|
-
`CometChatMessageOption` model:
|
|
327
|
-
|
|
328
|
-
```dart
|
|
329
|
-
CometChatMessageOption(
|
|
330
|
-
id: 'pin', // unique identifier
|
|
331
|
-
title: 'Pin Message', // display text
|
|
332
|
-
icon: Icon(Icons.push_pin), // leading icon
|
|
333
|
-
onItemClick: (BaseMessage message, CometChatMessageListControllerProtocol state) {
|
|
334
|
-
// your action
|
|
335
|
-
},
|
|
336
|
-
messageOptionSheetStyle: CometChatMessageOptionSheetStyle(...),
|
|
337
|
-
)
|
|
338
|
-
```
|
|
339
|
-
|
|
340
|
-
### Custom attachment options — the builder REPLACES, so spread the defaults
|
|
341
|
-
|
|
342
|
-
`CometChatMessageComposer.attachmentOptions` is a `ComposerActionsBuilder` — `List<CometChatMessageComposerAction> Function(BuildContext, User?, Group?, Map<String,dynamic>? id)`. **Whatever list you return becomes the entire menu**; there is no merge. To add one option while keeping photo/video/audio/file/poll, seed the list from `ComposerAttachmentUtils.getAttachmentOptions(...)`.
|
|
343
|
-
|
|
344
|
-
> ⚠️ **`ComposerAttachmentUtils` is NOT exported from the package barrel** (`cometchat_chat_uikit.dart`) — verified by `dart analyze` against published `cometchat_chat_uikit 6.0.1`. The normal `import 'package:cometchat_chat_uikit/cometchat_chat_uikit.dart';` does **not** expose it; you must add a **deep import** of the internal path:
|
|
345
|
-
> ```dart
|
|
346
|
-
> import 'package:cometchat_chat_uikit/chat_ui/src/message_composer/utils/composer_attachment_utils.dart';
|
|
347
|
-
> ```
|
|
348
|
-
> This is an internal (`src/`) path — it works on 6.0.1 but is not part of the public API contract, so it may move across patch versions. There is no public accessor for the default attachment list in V6; this deep import is the only way to seed the defaults.
|
|
24
|
+
## Customization mechanism (BAKED — v6)
|
|
25
|
+
Three tiers, in the order you should reach for them:
|
|
349
26
|
|
|
27
|
+
**1. App-wide theme — `ThemeExtension` on your `ThemeData`.** This is the main lever; it restyles every CometChat widget at once.
|
|
350
28
|
```dart
|
|
351
29
|
import 'package:cometchat_chat_uikit/cometchat_chat_uikit.dart';
|
|
352
|
-
import 'package:
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
onItemClick: (ctx, u, g) { /* pick + send (below) */ },
|
|
361
|
-
),
|
|
30
|
+
import 'package:flutter/material.dart';
|
|
31
|
+
|
|
32
|
+
final cometchatLight = ThemeData(
|
|
33
|
+
fontFamily: 'Inter',
|
|
34
|
+
extensions: [
|
|
35
|
+
CometChatColorPalette(primary: const Color(0xFFF76808)),
|
|
36
|
+
CometChatTypography(),
|
|
37
|
+
CometChatSpacing(),
|
|
362
38
|
],
|
|
363
|
-
)
|
|
364
|
-
```
|
|
365
|
-
|
|
366
|
-
```dart
|
|
367
|
-
// ❌ returns ONLY your option — every default attachment disappears
|
|
368
|
-
attachmentOptions: (context, user, group, id) => [locationAction],
|
|
369
|
-
```
|
|
370
|
-
|
|
371
|
-
### Sending a custom message — use the UIKit path, not the raw SDK
|
|
372
|
-
|
|
373
|
-
A `contentView`/`BubbleFactory` only renders the type; send the message with **`CometChatUIKit.sendCustomMessage(...)`**, not `CometChat.sendCustomMessage(...)`. The UIKit wrapper sets `muid` + sender and fires `ccMessageSent`, which makes the new bubble **append** to the open list. The raw SDK call skips those, giving a recipient error and a realtime bubble that **replaces** an existing one (no `muid` dedup).
|
|
374
|
-
|
|
375
|
-
```dart
|
|
376
|
-
final message = CustomMessage(
|
|
377
|
-
receiverUid: user.uid,
|
|
378
|
-
receiverType: ReceiverTypeConstants.user, // or .group
|
|
379
|
-
type: 'location', // matches the template type
|
|
380
|
-
customData: {'lat': 19.07, 'lng': 72.87},
|
|
381
39
|
);
|
|
382
|
-
// ✅ kit path — sets muid + sender, emits ccMessageSent → list appends
|
|
383
|
-
await CometChatUIKit.sendCustomMessage(message);
|
|
384
|
-
// ❌ await CometChat.sendCustomMessage(message); // recipient error + realtime replace
|
|
385
40
|
```
|
|
386
41
|
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
## 5. Tier 4: BubbleFactory & DataSource
|
|
390
|
-
|
|
391
|
-
### BubbleFactory
|
|
392
|
-
|
|
393
|
-
The deepest customization for rendering message content. Each factory handles one `category_type` key.
|
|
394
|
-
|
|
42
|
+
**2. Light / dark — Flutter's own switching, nothing CometChat-specific.** Supply both themes and let `themeMode` decide; `ThemeMode.system` follows the OS, which is the right default for a fresh app.
|
|
395
43
|
```dart
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
Widget build(
|
|
399
|
-
BuildContext context,
|
|
400
|
-
T message,
|
|
401
|
-
BubbleAlignment alignment, {
|
|
402
|
-
CometChatColorPalette? colorPalette,
|
|
403
|
-
CometChatTypography? typography,
|
|
404
|
-
CometChatSpacing? spacing,
|
|
405
|
-
});
|
|
406
|
-
|
|
407
|
-
/// Returns "category_type" key, or "deleted" for deleted messages.
|
|
408
|
-
static String getFactoryKey(BaseMessage message);
|
|
409
|
-
|
|
410
|
-
/// Creates a key from category + type strings.
|
|
411
|
-
static String createKey(String category, String type) => '${category}_$type';
|
|
412
|
-
}
|
|
413
|
-
```
|
|
414
|
-
|
|
415
|
-
### DefaultBubbleFactories
|
|
416
|
-
|
|
417
|
-
The built-in registry:
|
|
418
|
-
|
|
419
|
-
```dart
|
|
420
|
-
class DefaultBubbleFactories {
|
|
421
|
-
static Map<String, BubbleFactory> getDefaults({
|
|
422
|
-
List<CometChatTextFormatter>? textFormatters,
|
|
423
|
-
CometChatTextBubbleStyle? incomingTextStyle,
|
|
424
|
-
CometChatTextBubbleStyle? outgoingTextStyle,
|
|
425
|
-
CometChatImageBubbleStyle? imageStyle,
|
|
426
|
-
CometChatVideoBubbleStyle? videoStyle,
|
|
427
|
-
CometChatAudioBubbleStyle? audioStyle,
|
|
428
|
-
CometChatFileBubbleStyle? fileStyle,
|
|
429
|
-
});
|
|
430
|
-
}
|
|
431
|
-
```
|
|
432
|
-
|
|
433
|
-
Default keys registered:
|
|
434
|
-
- `message_text` → `TextBubbleFactory`
|
|
435
|
-
- `message_image` → `ImageBubbleFactory`
|
|
436
|
-
- `message_video` → `VideoBubbleFactory`
|
|
437
|
-
- `message_audio` → `AudioBubbleFactory`
|
|
438
|
-
- `message_file` → `FileBubbleFactory`
|
|
439
|
-
- `deleted` → `DeletedBubbleFactory`
|
|
440
|
-
|
|
441
|
-
### Creating a Custom BubbleFactory
|
|
442
|
-
|
|
443
|
-
Example: a location message bubble.
|
|
444
|
-
|
|
445
|
-
```dart
|
|
446
|
-
class LocationBubbleFactory extends BubbleFactory<CustomMessage> {
|
|
447
|
-
@override
|
|
448
|
-
Widget build(
|
|
449
|
-
BuildContext context,
|
|
450
|
-
CustomMessage message,
|
|
451
|
-
BubbleAlignment alignment, {
|
|
452
|
-
CometChatColorPalette? colorPalette,
|
|
453
|
-
CometChatTypography? typography,
|
|
454
|
-
CometChatSpacing? spacing,
|
|
455
|
-
}) {
|
|
456
|
-
final data = message.customData;
|
|
457
|
-
final lat = data?['latitude'] as double? ?? 0;
|
|
458
|
-
final lng = data?['longitude'] as double? ?? 0;
|
|
44
|
+
import 'package:cometchat_chat_uikit/cometchat_chat_uikit.dart';
|
|
45
|
+
import 'package:flutter/material.dart';
|
|
459
46
|
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
children: [
|
|
465
|
-
Image.network(
|
|
466
|
-
'https://maps.googleapis.com/maps/api/staticmap?center=$lat,$lng&zoom=15&size=300x200&key=YOUR_KEY',
|
|
467
|
-
width: 240,
|
|
468
|
-
height: 160,
|
|
469
|
-
fit: BoxFit.cover,
|
|
470
|
-
),
|
|
471
|
-
Padding(
|
|
472
|
-
padding: EdgeInsets.all(spacing?.padding2 ?? 8),
|
|
473
|
-
child: Text(
|
|
474
|
-
'📍 $lat, $lng',
|
|
475
|
-
style: typography?.body?.regular,
|
|
476
|
-
),
|
|
477
|
-
),
|
|
478
|
-
],
|
|
47
|
+
Widget app(Widget home) => MaterialApp(
|
|
48
|
+
theme: ThemeData(extensions: [CometChatColorPalette(primary: const Color(0xFFF76808))]),
|
|
49
|
+
darkTheme: ThemeData.dark().copyWith(
|
|
50
|
+
extensions: [CometChatColorPalette(primary: const Color(0xFFF76808))],
|
|
479
51
|
),
|
|
52
|
+
themeMode: ThemeMode.system, // follow the device setting
|
|
53
|
+
home: home,
|
|
480
54
|
);
|
|
481
|
-
}
|
|
482
|
-
}
|
|
483
|
-
```
|
|
484
|
-
|
|
485
|
-
### Registering Custom Factories
|
|
486
|
-
|
|
487
|
-
Merge your custom factories with the defaults using `CometChatMessageTemplate.addTemplate` on the message list, or by providing a custom `templates` list that includes a `contentView` for your custom type.
|
|
488
|
-
|
|
489
|
-
`CometChatMessageBubble` is a pure slot widget — it accepts pre-built `contentView`, `headerView`, `footerView`, `replyView`, `threadView`, `bottomView`, `statusInfoView`, and `leadingView` widgets. It does NOT resolve message types via a factory registry; factory resolution happens one layer up, inside `CometChatMessageList`, which picks the right template based on `category_type` and invokes that template's `contentView` builder.
|
|
490
|
-
|
|
491
|
-
```dart
|
|
492
|
-
// Using addTemplate to register a custom type alongside defaults
|
|
493
|
-
CometChatMessageList(
|
|
494
|
-
user: user,
|
|
495
|
-
addTemplate: [
|
|
496
|
-
CometChatMessageTemplate(
|
|
497
|
-
type: 'location',
|
|
498
|
-
category: 'custom',
|
|
499
|
-
contentView: (message, context, alignment, {additionalConfigurations}) {
|
|
500
|
-
final factory = LocationBubbleFactory();
|
|
501
|
-
return factory.build(context, message as CustomMessage, alignment);
|
|
502
|
-
},
|
|
503
|
-
),
|
|
504
|
-
],
|
|
505
|
-
)
|
|
506
|
-
```
|
|
507
|
-
|
|
508
|
-
### DataSource Pattern
|
|
509
|
-
|
|
510
|
-
> **V6 ≠ V5 here.** V6 has **no** `ChatConfigurator`, `DataSource`/`DataSourceDecorator`, `ExtensionsDataSource`, `CometChatUIKit.getDataSource()`, or `getAllMessageTemplates()` override-and-register flow — that GetX-era framework is **V5-only** (verified absent in the v6 clone). In V6 you merge custom templates with the widget-level `addTemplate:` prop and customize data fetching by supplying a custom BLoC. Don't carry the V5 decorator recipe over.
|
|
511
|
-
|
|
512
|
-
Each component follows Clean Architecture with its own data source layer. The data sources abstract SDK calls behind interfaces:
|
|
513
|
-
|
|
514
|
-
```dart
|
|
515
|
-
// Example: ConversationsRemoteDataSource (full real interface)
|
|
516
|
-
abstract class ConversationsRemoteDataSource {
|
|
517
|
-
Future<List<Conversation>> getConversations({int limit = 30, String? fromId});
|
|
518
|
-
Future<Conversation?> getConversation(String conversationWith, String conversationType);
|
|
519
|
-
Future<void> deleteConversation(String conversationWith, String conversationType);
|
|
520
|
-
Future<void> markMessageAsRead(BaseMessage message);
|
|
521
|
-
Future<Conversation?> updateConversation(BaseMessage message);
|
|
522
|
-
}
|
|
523
|
-
|
|
524
|
-
class ConversationsRemoteDataSourceImpl implements ConversationsRemoteDataSource {
|
|
525
|
-
// Delegates to CometChat SDK — must implement ALL five methods above.
|
|
526
|
-
}
|
|
527
|
-
```
|
|
528
|
-
|
|
529
|
-
To customize data fetching, provide a custom BLoC instance:
|
|
530
|
-
|
|
531
|
-
```dart
|
|
532
|
-
CometChatConversations(
|
|
533
|
-
conversationsBloc: MyCustomConversationsBloc(),
|
|
534
|
-
)
|
|
535
|
-
|
|
536
|
-
CometChatUsers(
|
|
537
|
-
usersBloc: MyCustomUsersBloc(),
|
|
538
|
-
)
|
|
539
|
-
|
|
540
|
-
CometChatGroups(
|
|
541
|
-
groupsBloc: MyCustomGroupsBloc(),
|
|
542
|
-
)
|
|
543
|
-
|
|
544
|
-
CometChatMessageList(
|
|
545
|
-
messageListBloc: MyCustomMessageListBloc(),
|
|
546
|
-
)
|
|
547
|
-
```
|
|
548
|
-
|
|
549
|
-
## 6. Style Overrides
|
|
550
|
-
|
|
551
|
-
Every component has a `CometChat{Component}Style` class that extends `ThemeExtension`. Styles use a `merge()` pattern — your overrides layer on top of theme defaults.
|
|
552
|
-
|
|
553
|
-
### Pattern
|
|
554
|
-
|
|
555
|
-
```dart
|
|
556
|
-
@immutable
|
|
557
|
-
class CometChatTextBubbleStyle extends ThemeExtension<CometChatTextBubbleStyle> {
|
|
558
|
-
const CometChatTextBubbleStyle({
|
|
559
|
-
this.textStyle,
|
|
560
|
-
this.textColor,
|
|
561
|
-
this.backgroundColor,
|
|
562
|
-
this.border,
|
|
563
|
-
this.borderRadius,
|
|
564
|
-
this.messageBubbleAvatarStyle,
|
|
565
|
-
this.messageBubbleDateStyle,
|
|
566
|
-
this.messageBubbleBackgroundImage,
|
|
567
|
-
this.senderNameTextStyle,
|
|
568
|
-
this.messageReceiptStyle,
|
|
569
|
-
// ...
|
|
570
|
-
});
|
|
571
|
-
|
|
572
|
-
// Factory to get theme-registered instance
|
|
573
|
-
static CometChatTextBubbleStyle of(BuildContext context) => const CometChatTextBubbleStyle();
|
|
574
|
-
|
|
575
|
-
// Merge your overrides on top of theme defaults
|
|
576
|
-
CometChatTextBubbleStyle merge(CometChatTextBubbleStyle? style);
|
|
577
|
-
|
|
578
|
-
// copyWith for selective overrides
|
|
579
|
-
CometChatTextBubbleStyle copyWith({...});
|
|
580
|
-
}
|
|
581
|
-
```
|
|
582
|
-
|
|
583
|
-
### Usage
|
|
584
|
-
|
|
585
|
-
```dart
|
|
586
|
-
CometChatConversations(
|
|
587
|
-
conversationsStyle: CometChatConversationsStyle(
|
|
588
|
-
backgroundColor: Colors.grey[100],
|
|
589
|
-
titleTextStyle: TextStyle(fontSize: 18, fontWeight: FontWeight.w600),
|
|
590
|
-
),
|
|
591
|
-
)
|
|
592
|
-
|
|
593
|
-
CometChatMessageHeader(
|
|
594
|
-
user: user,
|
|
595
|
-
messageHeaderStyle: CometChatMessageHeaderStyle(
|
|
596
|
-
backgroundColor: colorPalette.background1,
|
|
597
|
-
),
|
|
598
|
-
)
|
|
599
|
-
|
|
600
|
-
CometChatMessageList(
|
|
601
|
-
user: user,
|
|
602
|
-
style: CometChatMessageListStyle(
|
|
603
|
-
backgroundColor: Colors.white,
|
|
604
|
-
),
|
|
605
|
-
)
|
|
606
|
-
|
|
607
|
-
CometChatMessageComposer(
|
|
608
|
-
user: user,
|
|
609
|
-
messageComposerStyle: CometChatMessageComposerStyle(
|
|
610
|
-
backgroundColor: Colors.white,
|
|
611
|
-
borderRadius: BorderRadius.circular(24),
|
|
612
|
-
),
|
|
613
|
-
)
|
|
614
|
-
```
|
|
615
|
-
|
|
616
|
-
### Theme Caching
|
|
617
|
-
|
|
618
|
-
For performance, parent widgets cache theme lookups in `didChangeDependencies()` and pass them to children via optional `colorPalette`, `spacing`, `typography` params. This avoids expensive `CometChatThemeHelper` lookups during keyboard animation rebuilds.
|
|
619
|
-
|
|
620
|
-
```dart
|
|
621
|
-
// Parent caches once
|
|
622
|
-
late CometChatColorPalette _colorPalette;
|
|
623
|
-
bool _themeInitialized = false;
|
|
624
|
-
|
|
625
|
-
@override
|
|
626
|
-
void didChangeDependencies() {
|
|
627
|
-
super.didChangeDependencies();
|
|
628
|
-
if (!_themeInitialized) {
|
|
629
|
-
_colorPalette = CometChatThemeHelper.getColorPalette(context);
|
|
630
|
-
_themeInitialized = true;
|
|
631
|
-
}
|
|
632
|
-
}
|
|
633
|
-
|
|
634
|
-
// Pass to children — CometChatMessageBubble exposes colorPalette + spacing only
|
|
635
|
-
CometChatMessageBubble(
|
|
636
|
-
colorPalette: _colorPalette, // pre-cached, zero lookups in child
|
|
637
|
-
spacing: _spacing,
|
|
638
|
-
// For typography, read CometChatThemeHelper.getTypography(context) in the
|
|
639
|
-
// parent and use it directly inside the slot widgets you pass in.
|
|
640
|
-
)
|
|
641
|
-
```
|
|
642
|
-
|
|
643
|
-
## 7. Anti-Patterns
|
|
644
|
-
|
|
645
|
-
```dart
|
|
646
|
-
// ❌ WRONG — different formatters for list and composer
|
|
647
|
-
CometChatMessageList(textFormatters: [MarkdownTextFormatter()])
|
|
648
|
-
CometChatMessageComposer(textFormatters: []) // inconsistent rendering
|
|
649
|
-
|
|
650
|
-
// ✅ CORRECT — same formatter list
|
|
651
|
-
final formatters = [CometChatMentionsFormatter(user: user), MarkdownTextFormatter()];
|
|
652
|
-
CometChatMessageList(textFormatters: formatters)
|
|
653
|
-
CometChatMessageComposer(textFormatters: formatters)
|
|
654
|
-
```
|
|
655
|
-
|
|
656
|
-
```dart
|
|
657
|
-
// ❌ WRONG — calling CometChatThemeHelper in build() of a frequently-rebuilt widget
|
|
658
|
-
@override
|
|
659
|
-
Widget build(BuildContext context) {
|
|
660
|
-
final colorPalette = CometChatThemeHelper.getColorPalette(context); // expensive every rebuild
|
|
661
|
-
return Container(color: colorPalette.primary);
|
|
662
|
-
}
|
|
663
|
-
|
|
664
|
-
// ✅ CORRECT — cache in didChangeDependencies, use _themeInitialized flag
|
|
665
55
|
```
|
|
56
|
+
> Unlike the web kit (a `theme` prop + CSS variables), Flutter has no CometChat-specific mode switch — **do not invent one**. Register the palette on BOTH themes or dark mode falls back to defaults.
|
|
666
57
|
|
|
58
|
+
**3. Per-widget style objects — scope one surface only.** Every widget takes a `*Style` object: `CometChatConversationsStyle` · `CometChatMessageHeaderStyle` · `CometChatMessageListStyle` · `CometChatMessageComposerStyle` · `CometChatThreadedHeaderStyle` · `CometChatSearchStyle` · `CometChatIncomingMessageBubbleStyle` / `CometChatOutgoingMessageBubbleStyle` · `CometChatCallLogsStyle`.
|
|
667
59
|
```dart
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
)
|
|
679
|
-
|
|
680
|
-
// ✅ CORRECT — use addTemplate to add new types, or include options when overriding templates
|
|
681
|
-
```
|
|
682
|
-
|
|
683
|
-
```dart
|
|
684
|
-
// ❌ WRONG — creating a BubbleFactory that ignores the colorPalette/spacing params
|
|
685
|
-
class BadFactory extends BubbleFactory<CustomMessage> {
|
|
686
|
-
@override
|
|
687
|
-
Widget build(BuildContext context, CustomMessage message, BubbleAlignment alignment, {
|
|
688
|
-
CometChatColorPalette? colorPalette,
|
|
689
|
-
CometChatTypography? typography,
|
|
690
|
-
CometChatSpacing? spacing,
|
|
691
|
-
}) {
|
|
692
|
-
return Container(color: Colors.blue); // hardcoded color, ignores theme
|
|
693
|
-
}
|
|
694
|
-
}
|
|
695
|
-
|
|
696
|
-
// ✅ CORRECT — use the passed theme values
|
|
697
|
-
return Container(color: colorPalette?.primary ?? Colors.blue);
|
|
698
|
-
```
|
|
699
|
-
|
|
700
|
-
```dart
|
|
701
|
-
// ✅ CORRECT on ^6.0.1 — true (or omit; true is the default). The composer
|
|
702
|
-
// clamps the keyboard height to viewInsets (kit fix ENG-34434), so true does
|
|
703
|
-
// NOT double-compensate.
|
|
704
|
-
Scaffold(
|
|
705
|
-
resizeToAvoidBottomInset: true,
|
|
706
|
-
body: Column(children: [
|
|
707
|
-
Expanded(child: CometChatMessageList(user: user)),
|
|
708
|
-
CometChatMessageComposer(user: user),
|
|
709
|
-
]),
|
|
710
|
-
)
|
|
711
|
-
|
|
712
|
-
// ⚠ PRE-6.0.1 ONLY — false was the stopgap before the clamp landed. On ^6.0.1
|
|
713
|
-
// this is unnecessary; if you still see a double keyboard gap, upgrade the kit.
|
|
714
|
-
Scaffold(
|
|
715
|
-
resizeToAvoidBottomInset: false,
|
|
716
|
-
body: Column(children: [
|
|
717
|
-
Expanded(child: CometChatMessageList(user: user)),
|
|
718
|
-
CometChatMessageComposer(user: user),
|
|
719
|
-
]),
|
|
720
|
-
)
|
|
60
|
+
import 'package:cometchat_chat_uikit/cometchat_chat_uikit.dart';
|
|
61
|
+
import 'package:flutter/material.dart';
|
|
62
|
+
|
|
63
|
+
Widget themedHeader(User user) => CometChatMessageHeader(
|
|
64
|
+
user: user,
|
|
65
|
+
messageHeaderStyle: const CometChatMessageHeaderStyle(
|
|
66
|
+
backgroundColor: Color(0xFFFFFFFF),
|
|
67
|
+
titleTextColor: Color(0xFF141414),
|
|
68
|
+
subtitleTextColor: Color(0xFF727272),
|
|
69
|
+
onlineStatusColor: Color(0xFF09C26F),
|
|
70
|
+
),
|
|
71
|
+
);
|
|
721
72
|
```
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
-
|
|
730
|
-
-
|
|
731
|
-
-
|
|
732
|
-
-
|
|
733
|
-
-
|
|
734
|
-
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
73
|
+
> **Style parameter names are per-widget and NOT guessable** — the header uses `titleTextColor`/`onlineStatusColor`, the threaded header uses `bubbleContainerBackGroundColor`/`countTextColor`, search uses `searchBackgroundColor`/`searchBorderRadius`. Fetch the widget's `.md` twin before writing a style block.
|
|
74
|
+
> Message bubbles are themed app-wide through `CometChatIncomingMessageBubbleStyle` / `CometChatOutgoingMessageBubbleStyle` registered as theme extensions — see `message-bubble-styling`.
|
|
75
|
+
|
|
76
|
+
## Reading theme values in your own widgets
|
|
77
|
+
`CometChatThemeHelper.getColorPalette(context)` (and the typography/spacing equivalents) returns the resolved palette, so custom UI in a slot matches the kit instead of hard-coding hexes.
|
|
78
|
+
|
|
79
|
+
## Beyond colour — the other customization axes (FETCH the page)
|
|
80
|
+
- **View slots** — replace any row/section (`customization-view-slots`); custom UI goes IN the slot.
|
|
81
|
+
- **State views** — `loadingStateView` / `emptyStateView` / `errorStateView` (`customization-state-views`).
|
|
82
|
+
- **Menu options** — add or remove message actions via `CometChatMessageOption` and the template's `options` (`customization-menu-options`). The callback is `onItemClick(message, state)`.
|
|
83
|
+
- **Text formatters** — `CometChatMentionsFormatter` and custom `CometChatTextFormatter` subclasses (`customization-text-formatters`, `custom-text-formatter-guide`). A subclass must implement `init`, `getMessageInputTextStyle`, `handlePreMessageSend`, `onChange` and `onScrollToBottom` — the class is abstract.
|
|
84
|
+
- **Message templates** — custom message types and bubbles (`message-template`, → `-components`).
|
|
85
|
+
- **Sounds** — the class is **`SoundManager`**, UN-prefixed (there is no `CometChatSoundManager`), a singleton: `SoundManager().play(sound: Sound.incomingMessage, customSound: "assets/ping.mp3")` / `.stop()`. Compiler-verified vs 6.1.0. It is absent from the catalog only because that tracks `CometChat*` symbols — same as `User`/`Group`. Page: `sound-manager`.
|
|
86
|
+
- **Localization** — `Translations` from the **chat barrel**: `Translations.delegate` in `MaterialApp.localizationsDelegates`, `Translations.of(context)` for strings. v5's `package:cometchat_uikit_shared/l10n/translations.dart` is gone; the live `localize` page now documents the `Translations` path (DOCS-BACKLOG F7 corrected upstream — verified `cometchat/docs`@`2ebb1db`, 2026-09-09). `CometChatLocalize` does not resolve in 6.1.0.
|
|
87
|
+
|
|
88
|
+
## Common pitfalls (BAKED)
|
|
89
|
+
- **Inventing a CometChat dark-mode switch.** Use `ThemeData` + `themeMode`; register the palette on both themes.
|
|
90
|
+
- **Guessing style parameter names.** They differ per widget — fetch the twin.
|
|
91
|
+
- **Hard-coding colours in a custom slot** instead of reading `CometChatThemeHelper`.
|
|
92
|
+
- **v5 theming APIs** — `CometChatTheme` is now only a `mergeThemeExtensions` helper, not a palette holder; the v5 `CometChatThemeData`/`DataSource` styling path is gone (→ `-migration`).
|
|
93
|
+
- **Restyling by wrapping the widget** rather than passing its style object or slot.
|
|
94
|
+
|
|
95
|
+
## Verify it works
|
|
96
|
+
The brand colour appears on the surfaces you expect, light and dark both render (toggle the OS setting), custom slot UI matches the kit's palette, and no widget silently kept its default because the palette was registered on only one theme.
|