cometchat-flutter-v6-events — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited cometchat-flutter-v6-events (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: every listener symbol below is catalog-verified against 6.1.0. There are TWO event systems and they are not interchangeable — the exact callback set for each is FETCHED fromevents(UI events) and the SDK'sreal-time-listenersvia../cometchat-flutter-v6-core/references/docs-map.md.
cometchat-flutter-v6-core — install, credentials, init→login→render. This skill ASSUMES it."do something when a message arrives", "update a badge count", "refresh my screen when a group changes", "cometchat listener" — anything reactive OUTSIDE what the kit's widgets already do for themselves.
Covered by core. No new package.
The kit's widgets are already live. CometChatConversations updates its own unread counts, CometChatMessageList appends incoming messages, CometChatMessageHeader shows typing and presence — all without a single listener from you. Add one only for something OUTSIDE the kit's surface: an app-level badge, an analytics hook, a push registration, navigating on an incoming call.
Adding a listener to "make the list update" is the most common mistake here — it already does.
| SDK listeners | UI Kit events | |
|---|---|---|
| Source | the server, via CometChat.* | the kit's own widgets |
| Register | CometChat.addMessageListener(id, this) | CometChatMessageEvents.addMessagesListener(id, this) |
| Mixin | MessageListener · CallListener · UserListener · GroupListener · ConnectionListener | CometChatMessageEventListener · CometChatGroupEventListener · CometChatUserEventListener · CometChatConversationEventListener |
| Answers | "the server says X happened" | "the user did X in the kit" |
| Use for | badges, push, incoming calls, analytics | reacting to a kit action (message sent from the composer, group left via the kit) |
SDK listener — server-side truth:
import 'package:cometchat_chat_uikit/cometchat_chat_uikit.dart';
import 'package:flutter/material.dart';
class BadgeHost extends StatefulWidget {
const BadgeHost({super.key});
@override
State<BadgeHost> createState() => _BadgeHostState();
}
class _BadgeHostState extends State<BadgeHost> with MessageListener {
static const _id = "app_badge";
@override
void initState() {
super.initState();
CometChat.addMessageListener(_id, this);
}
@override
void dispose() {
CometChat.removeMessageListener(_id); // ALWAYS remove — see lifecycle below
super.dispose();
}
@override
void onTextMessageReceived(TextMessage message) {
// bump an app-level unread badge
}
@override
Widget build(BuildContext context) => const SizedBox.shrink();
}UI Kit event — react to what the kit did:
import 'package:cometchat_chat_uikit/cometchat_chat_uikit.dart';
import 'package:flutter/material.dart';
class ComposerWatcher extends StatefulWidget {
const ComposerWatcher({super.key});
@override
State<ComposerWatcher> createState() => _ComposerWatcherState();
}
class _ComposerWatcherState extends State<ComposerWatcher> with CometChatMessageEventListener {
static const _id = "composer_watch";
@override
void initState() {
super.initState();
CometChatMessageEvents.addMessagesListener(_id, this);
}
@override
void dispose() {
CometChatMessageEvents.removeMessagesListener(_id);
super.dispose();
}
@override
Widget build(BuildContext context) => const SizedBox.shrink();
}initState. A listener you never removed fires again, so a badge double-counts and a call dialog opens twice.login resolves receives nothing.MessageListener (SDK) and CometChatMessageEventListener (UI Kit) both declare onCardMessageReceived, but with two different `CardMessage` types — one from cometchat_sdk, one from the kit. Mixing them on the same State fails to compile with invalid_override. Use two separate classes (or two States) when you need both.
DataSource/ChatConfigurator event plumbing is gone (→ -migration).The reaction fires once (not twice) per event; hot-restart the app and confirm it still fires exactly once; navigate away and back and confirm no duplicate; with the app backgrounded, server-side events still arrive when it returns.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.