cometchat-flutter-v5-messages — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited cometchat-flutter-v5-messages (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Ground truth:cometchat_chat_uikit: ^5.2(legacy/maintenance-only; calls via rawcometchat_calls_sdk ^5.0.2) — pub-cache source +ui-kit/flutter/v5. Official docs: https://www.cometchat.com/docs/ui-kit/flutter/v5/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.
Components for displaying, sending, and managing messages.
Displays messages in a conversation.
| Prop | Type | Default | Description |
|---|---|---|---|
user | User? | — | User for 1-on-1 chat (one of user/group required) |
group | Group? | — | Group for group chat |
messagesRequestBuilder | MessagesRequestBuilder? | — | Custom message fetch builder |
style | CometChatMessageListStyle? | — | Visual styling |
alignment | ChatAlignment | standard | standard or leftAligned |
onThreadRepliesClick | ThreadRepliesClick? | — | Thread reply tap callback |
templates | List<CometChatMessageTemplate>? | — | Custom message templates |
textFormatters | List<CometChatTextFormatter>? | — | Custom text formatters |
receiptsVisibility | bool | true | Show read receipts |
avatarVisibility | bool | true | Show avatars |
disableReactions | bool | false | Disable reactions |
disableMentions | bool? | — | Disable @mentions |
messageId | int? | — | Scroll to specific message |
startFromUnreadMessages | bool | false | Start from unread |
showMarkAsUnreadOption | bool | false | Show mark-as-unread option |
enableSmartReplies | bool | false | Enable AI smart replies |
enableConversationStarters | bool | false | Enable conversation starters |
generateConversationSummary | bool | false | Generate AI summary |
hideEditMessageOption | bool | false | Hide edit option |
hideDeleteMessageOption | bool | false | Hide delete option |
hideReplyInThreadOption | bool | false | Hide reply-in-thread |
hideThreadView | bool? | — | Hide thread view entirely |
hideReactionOption | bool | false | Hide reaction option |
hideTranslateMessageOption | bool | false | Hide translate option |
hideMessagePrivatelyOption | bool | false | Hide private message option |
hideMessageInfoOption | bool | false | Hide message info |
hideFlagOption | bool | false | Hide flag/report option |
loadingStateView | WidgetBuilder? | — | Custom loading state |
emptyStateView | WidgetBuilder? | — | Custom empty state |
errorStateView | WidgetBuilder? | — | Custom error state |
CometChatMessageList(
user: user,
textFormatters: [
CometChatEmailFormatter(),
CometChatPhoneNumberFormatter(),
CometChatUrlFormatter(),
CometChatMentionsFormatter(user: user),
],
receiptsVisibility: true,
hideReplyInThreadOption: false,
hideEditMessageOption: false,
hideDeleteMessageOption: false,
)Full-featured message input with attachments, voice recording, mentions, and AI features.
| Prop | Type | Default | Description |
|---|---|---|---|
user | User? | — | Target user (one of user/group required) |
group | Group? | — | Target group |
messageComposerStyle | CometChatMessageComposerStyle? | — | Visual styling |
parentMessageId | int | 0 | Thread parent message ID |
placeholderText | String? | — | Input placeholder |
textFormatters | List<CometChatTextFormatter>? | — | Text formatters |
disableTypingEvents | bool | false | Disable typing indicators |
disableMentions | bool? | — | Disable @mentions |
disableMentionAll | bool | false | Disable @all mentions |
hideVoiceRecordingButton | bool? | — | Hide voice recording |
hideAttachmentButton | bool? | — | Hide attachment button |
hideSendButton | bool? | — | Hide send button |
hideStickersButton | bool? | — | Hide stickers |
hideImageAttachmentOption | bool? | — | Hide image attachment |
hideVideoAttachmentOption | bool? | — | Hide video attachment |
hideAudioAttachmentOption | bool? | — | Hide audio attachment |
hideFileAttachmentOption | bool? | — | Hide file attachment |
hidePollsOption | bool? | — | Hide polls |
hideCollaborativeDocumentOption | bool? | — | Hide collaborative doc |
hideCollaborativeWhiteboardOption | bool? | — | Hide whiteboard |
hideTakePhotoOption | bool? | — | Hide take photo |
onSendButtonTap | Function? | — | Custom send handler |
onError | OnError? | — | Error callback |
Compact variant with rounded pill-shaped input, inline rich text toolbar, and modern minimal aesthetic. Use it explicitly in your widget tree when you want this look — there is no global Layout toggle that swaps composers automatically.
| Prop | Type | Default | Description |
|---|---|---|---|
compactMessageComposerStyle | CometChatCompactMessageComposerStyle? | — | Visual styling |
enableRichTextFormatting | bool | true | Enable rich text (master switch) |
showRichTextFormattingOptions | bool | true | Show toolbar above composer |
showTextSelectionMenuItems | bool | true | Formatting in text selection menu |
hideRichTextFormattingOptions | Set<FormatType>? | — | Hide specific format types |
richTextToolbarStyle | CometChatRichTextToolbarStyle? | — | Toolbar styling |
enterKeyBehavior | EnterKeyBehavior | newLine | Enter key: sendMessage or newLine |
All other props (user, group, parentMessageId, hide* options, textFormatters, etc.) are the same as CometChatMessageComposer.
// ✅ CORRECT — compact composer with thread support
CometChatCompactMessageComposer(
user: user,
parentMessageId: parentMessage.id,
disableTypingEvents: false,
disableMentions: false,
hideVoiceRecordingButton: false,
)Displays user/group info. Implements PreferredSizeWidget for use as appBar.
| Prop | Type | Description |
|---|---|---|
user | User? | User to display |
group | Group? | Group to display |
messageHeaderStyle | CometChatMessageHeaderStyle? | Visual styling |
subtitleView | Widget? Function(Group?, User?, BuildContext)? | Custom subtitle |
listItemView | Widget Function(Group?, User?, BuildContext)? | Custom list item |
showBackButton | bool? | Show back button (default: true) |
onBack | VoidCallback? | Back button callback |
hideVideoCallButton | bool? | Hide video call button |
hideVoiceCallButton | bool? | Hide voice call button |
usersStatusVisibility | bool | Show online status (default: true) |
options | Function(User?, Group?, BuildContext)? | Custom header options menu |
Displays the parent message for threaded conversations.
| Prop | Type | Description |
|---|---|---|
parentMessage | BaseMessage | The parent message (required) |
loggedInUser | User | Current logged-in user (NON-nullable; pass CometChatUIKit.loggedInUser!) |
template | CometChatMessageTemplate? | Message template |
receiptsVisibility | bool? | Show receipts |
height | double? | Header height |
width | double? | Header width |
messageActionView | Function(BaseMessage, BuildContext)? | Builder for a custom action view in the header |
style | CometChatThreadedHeaderStyle? | Visual style |
textFormatters | List<CometChatTextFormatter>? | Custom text formatters |
Scaffold(
body: Column(
children: [
CometChatThreadedHeader(
parentMessage: parentMessage,
loggedInUser: CometChatUIKit.loggedInUser!,
),
Expanded(
child: CometChatMessageList(
user: user,
messagesRequestBuilder: MessagesRequestBuilder()
..parentMessageId = parentMessage.id,
),
),
CometChatMessageComposer(
user: user,
parentMessageId: parentMessage.id,
),
],
),
)Use CometChatUIKit static methods (not CometChat directly) to ensure UIKit events fire:
// ✅ CORRECT
CometChatUIKit.sendTextMessage(message, onSuccess: ..., onError: ...);
// ❌ WRONG — bypasses UIKit events (ccMessageSent won't fire)
CometChat.sendMessage(message, onSuccess: ...);class MessagesScreen extends StatelessWidget {
final User? user;
final Group? group;
const MessagesScreen({super.key, this.user, this.group});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: CometChatMessageHeader(
user: user,
group: group,
onBack: () => Navigator.pop(context),
),
body: Column(
children: [
Expanded(child: CometChatMessageList(user: user, group: group)),
CometChatMessageComposer(user: user, group: group),
],
),
);
}
}// ❌ WRONG — passing two NON-null targets at the same time
CometChatMessageList(user: aUser, group: aGroup) // ambiguous — kit ignores group
// ✅ At any moment, exactly one of user/group must be non-null.
// Passing both fields with one null (e.g. `user: user, group: null`) is fine
// and is what the chat-builder sample app does to switch between contexts.
// ❌ WRONG — using CometChat.sendMessage instead of CometChatUIKit
CometChat.sendMessage(message, onSuccess: ...);user or group passed to each componentuser/group passed to Header, List, and ComposerparentMessageId on both List and ComposerCometChatUIKit.sendTextMessage()~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.