From ab77f3e107ec544178cec99ec50bb7b4931a1415 Mon Sep 17 00:00:00 2001 From: "Raj Shah(CometChat)" Date: Wed, 24 Jun 2026 16:31:57 +0530 Subject: [PATCH 1/4] Updated code --- sdk/flutter/real-time-listeners.mdx | 78 ++++++++++++++++++++++++++++ ui-kit/flutter/getting-started.mdx | 20 +------ ui-kit/flutter/methods.mdx | 52 +++++++++++++++++++ ui-kit/flutter/upgrading-from-v5.mdx | 14 +---- 4 files changed, 134 insertions(+), 30 deletions(-) diff --git a/sdk/flutter/real-time-listeners.mdx b/sdk/flutter/real-time-listeners.mdx index beb27a03b..88dba59ce 100644 --- a/sdk/flutter/real-time-listeners.mdx +++ b/sdk/flutter/real-time-listeners.mdx @@ -10,6 +10,7 @@ CometChat provides 4 listeners viz. 1. [UserListener](#user-listener) 2. [GroupListener](#group-listener) 3. [MessageListener](#message-listener) +4. [AIAssistantListener](#ai-assistant-listener) ## User Listener @@ -157,6 +158,9 @@ The `MessageListener` class provides you with live events related to messages. B | `onTransientMessageReceived(TransientMessage transientMessage)` | This event is triggered when a Transient Message is received. | | `onMessageReactionAdded(ReactionEvent reactionEvent)` | This event is triggered when a reaction is added to a message in a user/group conversation. | | `onMessageReactionRemoved(ReactionEvent reactionEvent)` | This event is triggered when a reaction is remove from a message in a user/group conversation. | +| `onAIAssistantMessageReceived(AIAssistantMessage message)` | This event is triggered when a persisted AI Assistant message is received after a run completes. | +| `onAIToolResultReceived(AIToolResultMessage message)` | This event is triggered when an AI tool result message is received. | +| `onAIToolArgumentsReceived(AIToolArgumentMessage message)` | This event is triggered when AI tool argument messages are received. | To add the `MessageListener`, you need to use the `addMessageListener()` method provided by the `CometChat` class. @@ -244,6 +248,21 @@ class Class_Name with MessageListener { } + @override + void onAIAssistantMessageReceived(AIAssistantMessage aiAssistantMessage) { + + } + + @override + void onAIToolResultReceived(AIToolResultMessage aiToolResultMessage) { + + } + + @override + void onAIToolArgumentsReceived(AIToolArgumentMessage aiToolArgumentMessage) { + + } + } ``` @@ -254,3 +273,62 @@ class Class_Name with MessageListener { where `UNIQUE_LISTENER_ID` is the unique identifier for the listener. Please make sure that no two listeners are added with the same listener id as this could lead to unexpected behavior resulting in loss of events. Once the activity/fragment where the `MessageListener` is declared is not in use, you need to remove the listener using the `removeMessageListener()` method which takes the id of the listener to be removed as the parameter. We suggest you call this method in the `onPause()` method of the activity/fragment. + +## AI Assistant Listener + +The `AIAssistantListener` class provides you with real-time streaming events from AI Agent runs. These events are emitted during a run lifecycle and include tool calls, card generation, and text message streaming. For a complete overview of the event lifecycle, see [AI Agents](/sdk/flutter/ai-agents). + +| Method | Information | +| --- | --- | +| `onAIAssistantEventReceived(AIAssistantBaseEvent event)` | This event is triggered for every AI assistant streaming event during a run (run start/finish, tool calls, card generation, text streaming). | + +To add the `AIAssistantListener`, use the `addAIAssistantListener()` method provided by the `CometChat` class. + + + +```dart +class Class_Name with AIAssistantListener { + //CometChat.addAIAssistantListener("UNIQUE_LISTENER_ID", this); + + @override + void onAIAssistantEventReceived(AIAssistantBaseEvent event) { + // Handle different event types + if (event is AIAssistantRunStartedEvent) { + debugPrint("Run started: ${event.id}"); + } else if (event is AIAssistantToolCallStartedEvent) { + debugPrint("Tool call started"); + } else if (event is AIAssistantCardStartedEvent) { + debugPrint("Card generation started: ${event.cardId}"); + } else if (event is AIAssistantCardReceivedEvent) { + final cardPayload = event.getCard(); + debugPrint("Card received: ${event.cardId}"); + } else if (event is AIAssistantCardEndedEvent) { + debugPrint("Card ended: ${event.cardId}"); + } else if (event is AIAssistantTextMessageStartedEvent) { + debugPrint("Text message streaming started"); + } else if (event is AIAssistantTextMessageContentEvent) { + debugPrint("Streaming content: ${event.content}"); + } else if (event is AIAssistantTextMessageEndedEvent) { + debugPrint("Text message streaming ended"); + } else if (event is AIAssistantRunFinishedEvent) { + debugPrint("Run finished: ${event.id}"); + } + } +} +``` + + + +To remove the listener: + + + +```dart +CometChat.removeAIAssistantListener(UNIQUE_LISTENER_ID); +``` + + + + +The `AIAssistantListener` delivers real-time streaming events. After a run completes, persisted agentic messages (`AIAssistantMessage`, `AIToolResultMessage`, `AIToolArgumentMessage`) are delivered via the `MessageListener` callbacks listed above. + diff --git a/ui-kit/flutter/getting-started.mdx b/ui-kit/flutter/getting-started.mdx index d25242440..96cd21506 100644 --- a/ui-kit/flutter/getting-started.mdx +++ b/ui-kit/flutter/getting-started.mdx @@ -41,23 +41,9 @@ To get started, create a new flutter application project. ### **Step 2: Add Dependency** -**1. Install via CLI** - -Since V6 is hosted on Cloudsmith (not pub.dev), run this command instead of the standard `flutter pub add`: - -```bash -dart pub add cometchat_chat_uikit:6.0.0 --hosted-url https://dart.cloudsmith.io/cometchat/cometchat/ -``` - -**2. Update Pubspec** - -Or add it manually to your `pubspec.yaml`: - ```yaml pubspec.yaml dependencies: - cometchat_chat_uikit: - hosted: https://dart.cloudsmith.io/cometchat/cometchat/ - version: 6.0.0 + cometchat_chat_uikit: ^6.0.4 ``` Final `pubspec.yaml` @@ -77,9 +63,7 @@ dependencies: flutter: sdk: flutter - cometchat_chat_uikit: - hosted: https://dart.cloudsmith.io/cometchat/cometchat/ - version: 6.0.0 + cometchat_chat_uikit: ^6.0.4 cupertino_icons: ^1.0.8 diff --git a/ui-kit/flutter/methods.mdx b/ui-kit/flutter/methods.mdx index 9b38f9fb5..348581ec0 100644 --- a/ui-kit/flutter/methods.mdx +++ b/ui-kit/flutter/methods.mdx @@ -193,3 +193,55 @@ UIKitSettings uiKitSettings = (UIKitSettingsBuilder() ..dateTimeFormatterCallback = DateFormatter() ).build(); ``` + +## AI Assistant Events + +The UI Kit provides a UI-level event system for AI assistant interactions via `CometChatAIAssistantEvents`. These events mirror the SDK-level `AIAssistantListener` but are scoped to the UI layer for component-level reactions. + +### Add Listener + +```dart +CometChatAIAssistantEvents.addAIAssistantListener( + "unique_listener_id", + myListener, +); +``` + +### Remove Listener + +```dart +CometChatAIAssistantEvents.removeAIAssistantListener("unique_listener_id"); +``` + +### Listener Interface + +Implement `CometChatAIAssistantEventsListener` to receive events: + +```dart +class MyListener with CometChatAIAssistantEventsListener { + @override + void onAIAssistantEventReceived(AIAssistantBaseEvent event) { + // Handle AI assistant streaming events at the UI layer + } +} +``` + + +The UIKit's `CometChatMessageList` automatically handles AI events internally. Use `CometChatAIAssistantEvents` only if you need additional custom UI reactions to AI streaming events. + + +## UI Events — Card Actions + +When a user interacts with a card button inside an AI agent response or a standalone card message, the UIKit emits a `ccCardActionClicked` event: + +```dart +CometChatUIEvents.addUiListener("card_listener", myUIListener); + +class MyUIListener with CometChatUIEventListener { + @override + void ccCardActionClicked(BaseMessage message, CometChatCardActionEvent action) { + debugPrint("Action URL: ${action.actionUrl}"); + // Handle navigation, API calls, etc. + } +} +``` diff --git a/ui-kit/flutter/upgrading-from-v5.mdx b/ui-kit/flutter/upgrading-from-v5.mdx index 9acd6fbc7..78fd0259a 100644 --- a/ui-kit/flutter/upgrading-from-v5.mdx +++ b/ui-kit/flutter/upgrading-from-v5.mdx @@ -63,19 +63,9 @@ MessageTemplateUtils.getAllMessageTemplates(); ### 4. Update Dependencies -**Install V6 via CLI (hosted on Cloudsmith):** - -```bash -dart pub add cometchat_chat_uikit:6.0.0 --hosted-url https://dart.cloudsmith.io/cometchat/cometchat/ -``` - -Or add manually to `pubspec.yaml`: - -```yaml +```yaml pubspec.yaml dependencies: - cometchat_chat_uikit: - hosted: https://dart.cloudsmith.io/cometchat/cometchat/ - version: 6.0.0 + cometchat_chat_uikit: ^6.0.4 ``` ### 5. State Management Migration (Advanced) From 23103a0cde335670d0f832b90998810b520fa6c5 Mon Sep 17 00:00:00 2001 From: "Raj Shah(CometChat)" Date: Wed, 24 Jun 2026 16:46:58 +0530 Subject: [PATCH 2/4] docs(flutter): update call-features v6 install to pub.dev ^6.0.4 Aligns the Calls page install instructions with getting-started and upgrading-from-v5, which moved off Cloudsmith to pub.dev in this PR. Co-Authored-By: Claude Opus 4.8 --- ui-kit/flutter/call-features.mdx | 22 +++------------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/ui-kit/flutter/call-features.mdx b/ui-kit/flutter/call-features.mdx index 9cdb0685b..48a1b4a0b 100644 --- a/ui-kit/flutter/call-features.mdx +++ b/ui-kit/flutter/call-features.mdx @@ -11,28 +11,12 @@ CometChat's Calls feature allows you to integrate one-on-one and group audio/vid ### Step 1: Add Dependency -Since V6 is hosted on Cloudsmith, install via CLI: +Add the dependency to your `pubspec.yaml`: - - -```bash -dart pub add cometchat_chat_uikit:6.0.0 --hosted-url https://dart.cloudsmith.io/cometchat/cometchat/ -``` - - - -Or add manually to `pubspec.yaml`: - - - -```yaml +```yaml pubspec.yaml dependencies: - cometchat_chat_uikit: - hosted: https://dart.cloudsmith.io/cometchat/cometchat/ - version: 6.0.0 + cometchat_chat_uikit: ^6.0.4 ``` - - *** From c5ba63027157191ae465cf988f6a7bd9ca1305e8 Mon Sep 17 00:00:00 2001 From: "Raj Shah(CometChat)" Date: Wed, 24 Jun 2026 16:51:24 +0530 Subject: [PATCH 3/4] Updated code --- sdk/flutter/real-time-listeners.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/flutter/real-time-listeners.mdx b/sdk/flutter/real-time-listeners.mdx index 88dba59ce..70242173f 100644 --- a/sdk/flutter/real-time-listeners.mdx +++ b/sdk/flutter/real-time-listeners.mdx @@ -288,7 +288,7 @@ To add the `AIAssistantListener`, use the `addAIAssistantListener()` method prov ```dart class Class_Name with AIAssistantListener { - //CometChat.addAIAssistantListener("UNIQUE_LISTENER_ID", this); + CometChat.addAIAssistantListener("UNIQUE_LISTENER_ID", this); @override void onAIAssistantEventReceived(AIAssistantBaseEvent event) { @@ -324,7 +324,7 @@ To remove the listener: ```dart -CometChat.removeAIAssistantListener(UNIQUE_LISTENER_ID); +CometChat.removeAIAssistantListener("UNIQUE_LISTENER_ID"); ``` From 2165619c795a4314aaf4435e0a36d217ba0dc172 Mon Sep 17 00:00:00 2001 From: "Raj Shah(CometChat)" Date: Wed, 24 Jun 2026 17:23:58 +0530 Subject: [PATCH 4/4] Updated code --- sdk/flutter/real-time-listeners.mdx | 12 +++++------- ui-kit/flutter/methods.mdx | 10 +++++++--- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/sdk/flutter/real-time-listeners.mdx b/sdk/flutter/real-time-listeners.mdx index 70242173f..099c041ea 100644 --- a/sdk/flutter/real-time-listeners.mdx +++ b/sdk/flutter/real-time-listeners.mdx @@ -295,7 +295,7 @@ class Class_Name with AIAssistantListener { // Handle different event types if (event is AIAssistantRunStartedEvent) { debugPrint("Run started: ${event.id}"); - } else if (event is AIAssistantToolCallStartedEvent) { + } else if (event is AIAssistantToolStartedEvent) { debugPrint("Tool call started"); } else if (event is AIAssistantCardStartedEvent) { debugPrint("Card generation started: ${event.cardId}"); @@ -304,12 +304,10 @@ class Class_Name with AIAssistantListener { debugPrint("Card received: ${event.cardId}"); } else if (event is AIAssistantCardEndedEvent) { debugPrint("Card ended: ${event.cardId}"); - } else if (event is AIAssistantTextMessageStartedEvent) { - debugPrint("Text message streaming started"); - } else if (event is AIAssistantTextMessageContentEvent) { - debugPrint("Streaming content: ${event.content}"); - } else if (event is AIAssistantTextMessageEndedEvent) { - debugPrint("Text message streaming ended"); + } else if (event is AIAssistantContentReceivedEvent) { + debugPrint("Streaming content delta: ${event.delta}"); + } else if (event is AIAssistantMessageEndedEvent) { + debugPrint("Message streaming ended"); } else if (event is AIAssistantRunFinishedEvent) { debugPrint("Run finished: ${event.id}"); } diff --git a/ui-kit/flutter/methods.mdx b/ui-kit/flutter/methods.mdx index 348581ec0..c5ff2ef7d 100644 --- a/ui-kit/flutter/methods.mdx +++ b/ui-kit/flutter/methods.mdx @@ -239,9 +239,13 @@ CometChatUIEvents.addUiListener("card_listener", myUIListener); class MyUIListener with CometChatUIEventListener { @override - void ccCardActionClicked(BaseMessage message, CometChatCardActionEvent action) { - debugPrint("Action URL: ${action.actionUrl}"); - // Handle navigation, API calls, etc. + void ccCardActionClicked(BaseMessage message, dynamic action) { + if (action is CometChatCardActionEvent) { + debugPrint("Element ID: ${action.elementId}"); + debugPrint("Action: ${action.action}"); + debugPrint("Card JSON: ${action.cardJson}"); + // Handle navigation, API calls, etc. + } } } ```