Liquid Glass Widgets
sdegenaar/liquid_glass_widgets
Mastery guide and architectural rules for liquidglasswidgets.
Add voice & video calling to any Flutter app FROM SCRATCH with the headless CometChat Calls SDK v5 (cometchatcallssdk, pub.dev) — no UI Kit.
The automated check flagged lines worth reading first. See the safety section below.
$ npx skills add cometchat/cometchat-skills --skill cometchat-flutter-v5-sdk -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install cometchat/cometchat-skills cometchat-flutter-v5-sdk --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/cometchat/cometchat-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/cometchat-flutter-v5-sdk .claude/skills/cometchat-flutter-v5-sdk && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "cometchat-flutter-v5-sdk" agent skill from https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-flutter-v5-sdk into .claude/skills/cometchat-flutter-v5-sdk/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cometchat-flutter-v5-sdk", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-flutter-v5-sdkType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add cometchat/cometchat-skills --skill cometchat-flutter-v5-sdk -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install cometchat/cometchat-skills cometchat-flutter-v5-sdk --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cometchat/cometchat-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/cometchat-flutter-v5-sdk .agents/skills/cometchat-flutter-v5-sdk && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "cometchat-flutter-v5-sdk" agent skill from https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-flutter-v5-sdk into .agents/skills/cometchat-flutter-v5-sdk/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cometchat-flutter-v5-sdk", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add cometchat/cometchat-skills --skill cometchat-flutter-v5-sdk -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install cometchat/cometchat-skills cometchat-flutter-v5-sdk --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cometchat/cometchat-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/cometchat-flutter-v5-sdk .cursor/skills/cometchat-flutter-v5-sdk && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "cometchat-flutter-v5-sdk" agent skill from https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-flutter-v5-sdk into .cursor/skills/cometchat-flutter-v5-sdk/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cometchat-flutter-v5-sdk", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/cometchat/cometchat-skills.git --path skills/cometchat-flutter-v5-sdk--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add cometchat/cometchat-skills --skill cometchat-flutter-v5-sdk -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install cometchat/cometchat-skills cometchat-flutter-v5-sdk --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cometchat/cometchat-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/cometchat-flutter-v5-sdk .gemini/skills/cometchat-flutter-v5-sdk && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "cometchat-flutter-v5-sdk" agent skill from https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-flutter-v5-sdk into .gemini/skills/cometchat-flutter-v5-sdk/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cometchat-flutter-v5-sdk", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install cometchat/cometchat-skills cometchat-flutter-v5-sdkInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add cometchat/cometchat-skills --skill cometchat-flutter-v5-sdk -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/cometchat/cometchat-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/cometchat-flutter-v5-sdk .github/skills/cometchat-flutter-v5-sdk && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "cometchat-flutter-v5-sdk" agent skill from https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-flutter-v5-sdk into .github/skills/cometchat-flutter-v5-sdk/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cometchat-flutter-v5-sdk", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add cometchat/cometchat-skills --skill cometchat-flutter-v5-sdk -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install cometchat/cometchat-skills cometchat-flutter-v5-sdk --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cometchat/cometchat-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/cometchat-flutter-v5-sdk .opencode/skills/cometchat-flutter-v5-sdk && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "cometchat-flutter-v5-sdk" agent skill from https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-flutter-v5-sdk into .opencode/skills/cometchat-flutter-v5-sdk/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cometchat-flutter-v5-sdk", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
cometchat-flutter-v5-sdkAdd voice & video calling to any Flutter app FROM SCRATCH with the headless CometChat Calls SDK v5 (cometchatcallssdk, pub.dev) — no UI Kit.
Cometchat Flutter V5 SDK is an agent skill from cometchat/cometchat-skills. Add voice & video calling to any Flutter app FROM SCRATCH with the headless CometChat Calls SDK v5 (cometchatcallssdk, pub.dev) — no UI Kit. init→login→generateCallToken→joinSession, which hands back a Flutter Widget? you mount in your tree; CallSession listeners, in-call actions (mute/video/layout/record/PiP/raise-hand), meet-style session rooms AND 1:1 ringing (Chat SDK signaling + Calls SDK media). Triggers: 'add calling from scratch flutter', 'standalone video call dart', 'headless calls sdk flutter', 'build…
Its SKILL.md is about 5.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including reference files (for example `references/doc-corrections.md`, `references/docs-map.md` and `references/platform-notes.md`). Compatibility notes: Flutter =2.5.0, Dart =2.17.0 <4.0.0 · Android minSdk 26 (Android 8.0) · iOS 15.1. cometchatcallssdk ^5.0.3 — resolves to 5.0.7, which this skill is verified…
It sits in Mobile, covering Cross-platform mobile apps and Design systems. It works with Flutter, CometChat and Dart. The repository describes itself as: Add CometChat chat & messaging and voice & video calls to any React, Next.js, React Native, Angular, Android, iOS, or Flutter project through your AI coding agent. Works with… The licence is MIT.
Read from SKILL.md and the folder at commit 911b108. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
flutternpxnodeFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npx, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Flutter >=2.5.0, Dart >=2.17.0 <4.0.0 · Android minSdk 26 (Android 8.0) · iOS 15.1. cometchat_calls_sdk ^5.0.3 — resolves to 5.0.7, which this skill is verified against. 1:1 ringing also needs cometchat_sdk v5 (>=5.0.6; the pinned harness resolves 5.0.7 — the signaling symbols are identical across both) for signaling.
From compatibility in the SKILL.md frontmatter.
Cometchat Flutter V5 SDK loads about 5.3k tokens when it runs, and up to ~13k if it reads all its reference files. Until then it costs about 167 tokens; SKILL.md has 2,046 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found patterns that need a careful read before installing.
creenShare()` COMPILES and dispatches — do NOT tell the user local screen share is impossible or "invented." The **`/calAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from cometchat/cometchat-skills at commit 911b108, republished under its MIT licence (© cometchat). 2,046 words, ~5,278 tokens.
.claude/skills/cometchat-flutter-v5-sdk/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.Ground truth:
cometchat_calls_sdk5.0.7 from pub.dev + catalogflutter-calls-v5.json(the closed symbol list — 59 COMPILER-VERIFIED symbols; every type below is in it). Catalog built from the PUBLISHED package; at 5.0.7 it matches thecalls-coremonorepo exactly — but never infer that from a version string (references/docs-map.md§ "Upstream"). Official docs:/calls/flutter/**= v5 · Docs MCP. Fetch exactSessionSettingsfields, event names and signatures from the docs (references/docs-map.md) — never memory. ⚠️ The live pages carry ~56 symbols that DO NOT COMPILE, including the entire documented token flow — see "Doc corrections" below; prefer THIS skill's names over the page's. APPEND to the user's app — additive wiring only. This is the HEADLESS path (no UI Kit); for the prebuilt drop-in call UI usecometchat-flutter-v6-callsinstead.
-core sibling; self-contained for meet-style calling.cometchat_sdk v5) for signaling — signatures fetched via references/docs-map.md (§ "1:1 RINGING"). It does NOT depend on the Flutter UI Kit.cometchat-flutter-v6-core + cometchat-flutter-v6-calls — not this skill."add calling from scratch / without the UI Kit", "standalone voice/video on Flutter", "build my own call screen", "headless calls SDK", "meeting-room join by session id", "one-on-one ringing". Precondition: the caller chose the from-scratch / standalone path (the "add calling" router asks this). If they want the prebuilt call UI, route to cometchat-flutter-v6-calls.
# pubspec.yaml
dependencies:
cometchat_calls_sdk: ^5.0.7 # verified against 5.0.7then flutter pub get.
1:1 ringing additionally needs the Chat SDK (cometchat_sdk v5) for signaling.
Permissions — REQUIRED or the call dies on the first permission prompt.
android/app/src/main/AndroidManifest.xml: INTERNET, CAMERA, RECORD_AUDIO, MODIFY_AUDIO_SETTINGS, ACCESS_NETWORK_STATE. On API 23+ you must ALSO request camera + mic at runtime — the manifest alone is not enough, and this is the single most common "the SDK is broken" report on Android.ios/Runner/Info.plist: NSCameraUsageDescription + NSMicrophoneUsageDescription.minSdkVersion 26, iOS platform :ios, '15.1' — the real 5.0.7 floors. The docs say 24 and iOS 12; both fail at BUILD time. iOS moved 13.0 → 15.1 in 5.0.7, so an app can break on a routine pub upgrade.Credentials: App ID · Region · Auth Key (dev only), via the CLI — npx @cometchat/skills-cli@3 auth login → provision use --app-id <id> --json (@3 pins the CLI major that matches the v5 skills). Mint auth tokens server-side for production; never ship the Auth Key.
Init (once, must succeed) → CometChatCalls.login(...) → then generateCallToken / joinSession / listeners. Nothing joins before init+login resolve. CometChatCalls.isInitialized is the guard.
DEFAULT to CometChatCalls.initFromSettings(onSuccess:, onError:) — the ai-agent / telemetry-attributed path (persists integrationSource="ai-agent").
<!-- STOPGAP: source-derived (calls-core/calls-sdk-flutter), NOT in the public docs.
`initFromSettings` is `@nodoc` and ai-agent-only. DOCS-BACKLOG F4/D4 closed it WONTFIX —
it is to STAY hidden, so this stopgap is permanent, not pending a docs fix. -->
It takes no settings argument: it reads cometchat-settings.json through rootBundle, so the file must sit at the project root and be registered as a Flutter asset:
flutter:
assets:
- cometchat-settings.jsonRoot keys appId + region; optional callsSDK → adminHost/clientHost/callsHost. No Auth Key — the Calls SDK reads nothing else from this file (the key is a login() argument). Registering it under flutter: assets: is the ONLY step; no Xcode or Gradle change, because it is read through rootBundle. Miss the assets: entry and init fails with settings-file-not-found — a quiet callback, not a crash.
Fallback (public-doc path):
CallAppSettings s = (CallAppSettingBuilder()..appId = appId..region = region).build();
CometChatCalls.init(s, onSuccess: (String m) {}, onError: (CometChatCallsException e) {});Note the Dart cascade (..appId =) — these are fields, not setX() methods. CallAppSettingBuilder is singular (no s).
⚠️ Never do both. A builder init AFTER initFromSettings re-attributes the app to "manual" and the ai-agent telemetry is lost.
Login: CometChatCalls.login(uid:, authKey:, onSuccess:, onError:) (dev) or CometChatCalls.loginWithAuthToken(authToken:, onSuccess:, onError:) (production). Check await CometChatCalls.getLoggedInUser() first — it returns Future<User?> and the SDK keeps the session, so logging in twice is wasted work. Both onSuccess callbacks hand you a NULLABLE User? — the docs dereference it unguarded; do not copy that.
cometchat_sdk v5 as well. Fetch signatures via references/docs-map.md § "1:1 RINGING".joinSession returns a WIDGETEvery other platform mounts the call into a container you hand it. Flutter hands the call back to
you as a Widget? and mounts nothing:
Widget? _callWidget;
CometChatCalls.joinSession(
sessionId: sessionId,
sessionSettings: settings,
onSuccess: (Widget? w) => setState(() => _callWidget = w), // ← THIS is the render step
onError: (CometChatCallsException e) { /* surface it */ },
);
@override
Widget build(BuildContext c) => Scaffold(body: _callWidget ?? const CircularProgressIndicator());An emit that ignores the onSuccess argument joins the call successfully and shows nothing — audio flows, no video, no controls. It reads as a broken SDK and it is the #1 Flutter-specific failure. There is no container parameter and no zero-bounds trap; there is only "did you put the widget in the tree".
CometChatCalls.initFromSettings · CometChatCalls.init · CallAppSettingBuilder → CallAppSettings · CometChatCalls.isInitialized · login · loginWithAuthToken · logout · getLoggedInUser → User?CometChatCalls.generateCallToken(sessionId, …) → CallToken · joinSession(…) → Widget? · SessionSettingsBuilder → SessionSettings · SessionTypegenerateCallToken(sessionId) → joinSession(callToken:sessionSettings:), or joinSession(sessionId:sessionSettings:) directly.CallSession.getInstance(), for CUSTOM controls ONLY (the returned widget already renders them; see pitfall #1): leaveSession · muteAudio/unMuteAudio · pauseVideo/resumeVideo · setLayout · setAudioModeType · switchCamera · raiseHand/lowerHand · startRecording/stopRecording · startScreenShare/stopScreenShare/toggleScreenShare · pinParticipant/unPinParticipant · muteParticipant · pauseParticipantVideo · enablePictureInPictureLayout/disablePictureInPictureLayout · enterPipMode/isPipSupported · setChatButtonUnreadCount · isCallSessionActivetoggleMuteAudio · togglePauseVideo · toggleCameraSource · toggleRaiseHandendCallSession · startCallRecording/stopCallRecording · setCallLayoutTypehideSettingsPanel · openCallSettingsPanel · openVirtualBackgroundSettingsPanelisAudioMuted · isVideoPaused · isHandRaised · isRecording · isScreenSharing · isTranscribingCallSession.getInstance(); four are add/remove, LayoutListeners is a single-slot property): SessionStatusListeners · ParticipantEventListeners · MediaEventListeners · ButtonClickListeners · LayoutListenersCallLogRequestBuilder (top-level; FIELDS, no setX()) → CallLogRequest → fetchNext/fetchPrevious → CallLog (+ CallUser/CallGroup/CallEntity)CometChatOngoingCallService.launch() / .abort() — Android foreground service, no-op on iOSAudioMode (.speaker/.earpiece/.bluetooth) · SessionType · LayoutType (.tile/.spotlight/.sidebar) · CameraFacingA curated highlight, NOT the full surface. The authoritative closed list is the catalog (59 symbols, each proven by a
flutter analyzeprobe). A symbol is real iff it is in the catalog — confirm there, then fetch its signature from the page inreferences/docs-map.md.
All five listener types are abstract classes you IMPLEMENT — they are NOT constructible.
The live docs build every one of them with named callbacks
(SessionStatusListeners(onSessionJoined: () {…})); an abstract class cannot be instantiated, so
none of those examples compile. flutter analyze reports instantiate_abstract_class.
class _Status extends SessionStatusListeners {
@override void onSessionJoined() { /* ... */ }
@override void onSessionTimedOut() { /* distinct from onSessionLeft — handle BOTH */ }
// `extends` instead of `implements` and the other four inherit their no-op bodies.
}
final _status = _Status(); // hoist into a FIELD
CallSession.getInstance()?.addSessionStatusListener(_status); // BEFORE joining
// teardown:
CallSession.getInstance()?.removeSessionStatusListener(_status); // the SAME instance
CallSession.getInstance()?.leaveSession();extends lets you override only what you need; implements obliges you to write them all.remove*Listener takes the object you added. Constructing a fresh listener to remove one is a no-op that silently leaks the original — and it is what the live docs show (D4). Hoist into a field; there is no other shape in which removal works.references/docs-map.md. Two you cannot guess: MediaEvent**Listeners** registers via addMediaEvent**s**Listener, and LayoutListeners has no add/remove at all — it is a single-slot layoutListener = l setter, cleared with = null.CallSession.getInstance() is never actually null — the singleton is eagerly built, so registering BEFORE joinSession really does attach (certified: onSessionJoined fires). The type is still CallSession?, so keep ?.; use isCallSessionActive() to test for a live session.ButtonClickListeners callbacks fire alongside the SDK's own action and do NOT suppress it. Reacting to onLeaveSessionButtonClicked must NOT also call leaveSession() — the SDK is already leaving; doing both double-leaves. Use it to run CometChat.endCall(sessionId) on the ringing path.Participant has TWELVE fields, all nullable: uid · name · avatar · mid · state · isJoined · deviceId · joinedAt · leftAt · totalAudioMinutes · totalVideoMinutes · totalDurationInMinutes. No mute/pin/hand/share flags — the seven the docs' "Participant Object Reference" lists (pid/role/audioMuted/videoPaused/isPinned/isPresenting/raisedHandTimestamp) do NOT exist and do not compile (see doc-corrections.md); accumulate that live state from ParticipantEventListeners, as iOS must. Prefer onParticipantListChanged, which delivers the WHOLE list. (Participants, plural, is a @Deprecated typedef alias of Participant.)// Fetch every signature/field from references/docs-map.md. This is the ORDER, which is the part that bites.
import 'package:cometchat_calls_sdk/cometchat_calls_sdk.dart';
1. CometChatCalls.initFromSettings(onSuccess:, onError:) // ai-agent default; cometchat-settings.json as a Flutter ASSET
2. CometChatCalls.login(uid:, authKey:, onSuccess:, onError:) // or loginWithAuthToken in production
3. final settings = (SessionSettingsBuilder()..setDisplayName(name)..setType(SessionType.video)).build();
4. CallSession.getInstance()?.addSessionStatusListener(_status); // register BEFORE joining
5. CometChatCalls.joinSession(sessionId:, sessionSettings:, onSuccess: (Widget? w) => setState(() => _call = w), onError:)
// or: generateCallToken(sessionId) -> joinSession(callToken:sessionSettings:)
6. // return _call from build() — NOTHING renders until you do
7. // NO control buttons needed — the returned widget ALREADY renders mute/video/leave.
8. // teardown -> remove each listener (same instance); CallSession.getInstance()?.leaveSession()references/platform-notes.mdTwo things that are NOT on the join path and are easy to get wrong:
CometChatOngoingCallService.launch() holds a foreground service (.abort() on teardown).
Flutter-only; both calls are safe no-ops on iOS. The manifest permissions are not optional.cometchat_push_notifications Flutter package invented it.references/doc-corrections.md)23 classes of symbol on /calls/flutter/** fail flutter analyze against 5.0.7. Read
references/doc-corrections.md before copying off a page. The two that bite hardest:
| The docs write | It does not compile — use |
|---|---|
generateToken(sessionId: …) → CallToken (13 pages) | generateCallToken(sessionId, onSuccess:, onError:) → CallToken. generateToken is @Deprecated, takes two POSITIONAL args, and yields GenerateToken. No page mentions generateCallToken at all |
Participant.pid / .role / .audioMuted / .videoPaused / .isPinned / .isPresenting / .raisedHandTimestamp | None exist. Participant has 7 fields; track the rest from events |
Docs PR cometchat/docs#492 fixes the first seven classes (56 → 3 analyzer errors). Five more —
including the abstract-listener one — were found by running flutter analyze over this skill's
own harness AFTER #492 was open, and are not in it. 12 fences on those pages parse in no shape
and were never machine-checked, so the table is a floor, not a total.
joinSession renders nothing itself. Store the Widget? from onSuccess in State and return it from build().CallSession.getInstance() action methods are for CUSTOM controls ONLY — reach for them just when the user EXPLICITLY asks to replace the defaults, and hide the built-ins first via the ..hide*Button setters on SessionSettingsBuilder. To merely REACT to the built-in leave button, use ButtonClickListeners(onLeaveSessionButtonClicked:) — do not add a second button.remove*Listener matches by instance.User is exported by BOTH barrels — ringing imports both SDKs; ambiguous_import until one hides it (… hide User;). No page says so.leaveSession() ends your media, CometChat.endCall(sessionId) tells the peer and completes the log. Only the first, and the peer still thinks the call is live.cancelCall — cancel your own outgoing call with rejectCall(sessionId, CometChatCallStatus.cancelled).minSdkVersion left at Flutter's default — the floor is 26 (docs say 24), in android/app/build.gradle.kts on current Flutter, not android/build.gradle.CometChatWebRTC excludes arm64, so the app builds x86_64 — fine on an iOS 18 simulator (Rosetta), impossible on iOS 26+. Device or iOS 18 sim; details in references/platform-notes.md.cometchat-settings.json not in flutter: assets: — initFromSettings fails with settings-file-not-found. It is a quiet error callback, not a crash. Registering the asset is the whole job; no Xcode step.init after initFromSettings silently re-attributes telemetry to "manual".onSessionLeft but not onSessionTimedOut — idle timeout (default 300s, 0 disables) fires a DIFFERENT callback; miss it and the user sits on a dead call screen.enablePictureInPictureLayout() is the in-app layout, enterPipMode() is Android system PiP.CallSession.getInstance() has real startScreenShare()/stopScreenShare()/toggleScreenShare() + an isScreenSharing getter (barrel-reachable in 5.0.7; the method channel invokes a native startScreenShare and web routes to getDisplayMedia), and hideScreenSharingButton defaults to false so the built-in button is visible. So an emit calling startScreenShare() COMPILES and dispatches — do NOT tell the user local screen share is impossible or "invented." The /calls/flutter/screen-sharing DOC page still says "receive-only" — it documents only the RECEIVE side (onParticipantStartedScreenShare, participant.isPresenting, viewing a web participant's share); the shipped local-share control API is undocumented there. Reflect the shipped methods, and note the page lags them.SessionSettings fields and action params are FETCHED from docs, never guessed.cometchat_calls_sdk symbol emitted appears in flutter-calls-v5.json (node test-suite/scripts/verify-catalog.mjs --family flutter-calls-v5).cometchat_calls_sdk (5.0.7) with flutter analyze in test-suite/harness/flutter-calls.references/docs-map.md § "1:1 RINGING".© cometchat, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 4 other files (references) in skills/cometchat-flutter-v5-sdk of cometchat/cometchat-skills.
Open the folder on GitHubat commit 911b108
Cometchat Flutter V5 SDK next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Cometchat Flutter V5 SDK this skillcometchat/cometchat-skills | 129 | — | ~5.3k | Automated safety check: Warn | MIT | |
| Liquid Glass Widgetssdegenaar/liquid_glass_widgets | 711 | — | ~3.8k | Automated safety check: Pass | MIT | |
| Flutter Pub ReleaseMixinNetwork/flutter-plugins | 512 | — | ~1.3k | Automated safety check: Pass | MIT | |
| Flutter Bloc and Cubitandrewyng/context-hub | 14k | — | ~998 | Automated safety check: Pass | MIT | |
| Solidnank1ro/solid | 165 | — | ~3.1k | Automated safety check: Pass | MIT | |
| Sync Cbl Docscbl-dart/cbl-dart | 152 | — | ~2k | Automated safety check: Pass | Apache-2.0 |
sdegenaar/liquid_glass_widgets
Mastery guide and architectural rules for liquidglasswidgets.
MixinNetwork/flutter-plugins
Prepare and draft a pub.dev release for a package in the flutter-plugins monorepo.
andrewyng/context-hub
Helps choose between Bloc and Cubit in Flutter and sets defaults for packages, lifecycle, widget binding and tests.
nank1ro/solid
PRIORITY — read this skill FIRST before writing Dart code when pubspec.yaml declares solidannotations or solidgenerator.
cbl-dart/cbl-dart
Sync a Couchbase Lite for Dart documentation page with the official Couchbase Lite docs.
alnitak/flutter_soloud
Explains how to add and tune flutter_soloud's 13 audio filters at global, per-sound and mixing-bus level, including activation order and parameter fades.
cometchat/cometchat-skills
Adds voice and video calling to an Android app in Kotlin with the headless CometChat Calls SDK v5, covering meeting-style rooms, 1:1 ringing calls, call logs and recording.
cometchat/cometchat-skills
Builds chat on Android with your own UI against the headless CometChat Chat SDK v5, covering install, Jetifier conflicts, credentials and init-before-login ordering.
cometchat/cometchat-skills
Picks and customizes CometChat's Angular UI Kit components by their verified component list, exact input and output event names, and the surfaces that have no kit component at all.
cometchat/cometchat-skills
Enables or builds CometChat features such as polls, reactions, smart replies and pinned messages in an Angular app, first classifying how much client code each one needs.
cometchat/cometchat-skills
Decides where CometChat chat UI goes in an Angular app: a dedicated route, a dashboard panel, a support widget or the full multi-pane app, with thread and search panels.
cometchat/cometchat-skills
Add voice & video calling to any iOS app FROM SCRATCH with the headless CometChat Calls SDK v5 (CometChatCallsSDK, via Swift Package Manager) — no UI Kit.
Categories
Add voice & video calling to any Flutter app FROM SCRATCH with the headless CometChat Calls SDK v5 (cometchatcallssdk, pub.dev) — no UI Kit. Cometchat Flutter V5 SDK is an agent skill from cometchat/cometchat-skills.dev) — no UI Kit.
Cometchat Flutter V5 SDK fits situations like: tasks that involve Cross-platform mobile apps; tasks that involve Design systems.
Run `npx skills add cometchat/cometchat-skills --skill cometchat-flutter-v5-sdk -a claude-code`. Or copy the skill folder (skills/cometchat-flutter-v5-sdk in cometchat/cometchat-skills) into .claude/skills/cometchat-flutter-v5-sdk in your project. Claude Code loads it when a task matches its description.
Run `npx skills add cometchat/cometchat-skills --skill cometchat-flutter-v5-sdk -a codex`. Or copy the skill folder (skills/cometchat-flutter-v5-sdk in cometchat/cometchat-skills) into .agents/skills/cometchat-flutter-v5-sdk in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add cometchat/cometchat-skills --skill cometchat-flutter-v5-sdk -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/cometchat-flutter-v5-sdk, .gemini/skills/cometchat-flutter-v5-sdk, .github/skills/cometchat-flutter-v5-sdk and .opencode/skills/cometchat-flutter-v5-sdk in your project.
Going by SKILL.md and its folder, Cometchat Flutter V5 SDK needs the command-line tools its instructions call (flutter, npx and node). Our summary lists: Node.js. Compatibility (from SKILL.md): Flutter >=2.5.0, Dart >=2.17.0 <4.0.0 · Android minSdk 26 (Android 8.0) · iOS 15.1. cometchat_calls_sdk ^5.0.3 — resolves to 5.0.7, which this skill is verified against. 1:1 ringing also needs cometchat_sdk v5 (>=5.0.6; the pinned harness resolves 5.0.7 — the signaling symbols are identical across both) for signaling..
SKILL.md contains no URLs. Its commands use npx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md flagged 1 warning(s): contains instruction-override wording (e.g. “without asking the user”). Read the flagged lines before installing; the check is not a guarantee either way.
Cometchat Flutter V5 SDK is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.3k tokens (SKILL.md is roughly 21k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 8.1k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Cometchat Flutter V5 SDK: Liquid Glass Widgets (sdegenaar/liquid_glass_widgets, 711 stars), Flutter Pub Release (MixinNetwork/flutter-plugins, 512 stars), Flutter Bloc and Cubit (andrewyng/context-hub, 14k stars) and Solid (nank1ro/solid, 165 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
cometchat (a GitHub organization) maintains it in cometchat/cometchat-skills, which has 129 GitHub stars. The repository holds 97 skills in this directory. The repository was last updated on October 5, 2026.
Source: cometchat/cometchat-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.