Cometchat flutter v5 theming
Skill cometchat/cometchat-skills/skills/cometchat-flutter-v5-theming
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 Claude Code, Cursor, Codex, VS Code Copilot, Windsurf, Cline, Kiro, and 50+ more agents.
npx -y skills add cometchat/cometchat-skills --skill cometchat-flutter-v5-themingAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
What its author says it does
Copied from the file, not written here
Use when customizing the visual appearance of CometChat Flutter UIKit v5 components. Triggers on CometChatThemeHelper, CometChatColorPalette, CometChatSpacing, CometChatTypography, Style classes, merge().
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
5.8 KB, as published. Nobody here has run it
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.
CometChat Flutter UIKit v5 — Theming & Styling
How to customize the visual appearance of all CometChat v5 components.
Theme System Architecture
Three layers, resolved via Flutter's ThemeExtension system:
CometChatColorPalette— colors (primary, neutral, alert, background, text, icon, button, border)CometChatSpacing— spacing, padding, margin, and radius tokensCometChatTypography— text styles (heading1-4, body, caption1-2, button, link, title)
Access via static helpers:
final colors = CometChatThemeHelper.getColorPalette(context);
final spacing = CometChatThemeHelper.getSpacing(context);
final typography = CometChatThemeHelper.getTypography(context);
Important: getColorPalette() creates a new object every call, resolving each token via Theme.of(context). Cache in didChangeDependencies(), never call in build().
Applying a Custom Theme
Register CometChatColorPalette as a ThemeExtension on your ThemeData:
// ✅ CORRECT
MaterialApp(
theme: ThemeData(
extensions: [
CometChatColorPalette(
primary: const Color(0xFF6852D6),
textPrimary: const Color(0xFF141414),
textSecondary: const Color(0xFF727272),
),
],
),
darkTheme: ThemeData(
extensions: [
CometChatColorPalette(
primary: const Color(0xFF604CC3),
textPrimary: const Color(0xFFFFFFFF),
textSecondary: const Color(0xFFA0A0A0),
),
],
),
)
Dark Mode
CometChatThemeMode.mode = ThemeMode.dark; // Force dark
CometChatThemeMode.mode = ThemeMode.system; // Follow system
Commonly Used Color Tokens
| Token | Description | Light Default | Dark Default |
|---|---|---|---|
primary | Brand color | #6852D6 | #604CC3 |
background1–4 | Surface backgrounds | neutral50→neutral300 | neutral50→neutral300 |
textPrimary | Main text | neutral900 | neutral900 |
textSecondary | Secondary text | neutral600 | neutral600 |
borderLight | Subtle borders | neutral200 | neutral200 |
iconPrimary | Main icons | neutral900 | neutral900 |
iconSecondary | Secondary icons | neutral500 | neutral500 |
iconHighlight | Highlighted icons | primary | primary |
error | Error states | #F44649 | #C73C3E |
white / black | Fixed (NOT brightness-aware) | Colors.white / Colors.black | Same |
transparent | Transparent | Colors.transparent | Same |
neutral600 | Used for date styles | — | — |
Extended primary shades (extendedPrimary50–900) are auto-generated from primary. Override individually if needed.
Commonly Used Spacing Tokens
| Token | Default |
|---|---|
padding / spacing / radius | 2 |
padding1 / spacing1 / radius1 | 4 |
padding2 / spacing2 / radius2 | 8 |
padding3 / spacing3 / radius3 | 12 |
padding4 / spacing4 / radius4 | 16 |
padding5 / spacing5 / radius5 | 20 |
padding6 / spacing6 | 24 |
radiusMax / spacingMax | 1000 |
Typography Tokens
CometChatTypography provides: heading1–heading4, body, caption1, caption2, button, link, title.
Each has .bold, .medium, .regular variants:
typography.body?.regular?.fontSize
typography.heading2?.bold?.fontWeight
typography.caption1?.regular?.fontFamily
Theme Caching Pattern (from package source)
All UIKit components cache theme unconditionally in didChangeDependencies():
// ✅ CORRECT — matches actual package pattern
@override
void didChangeDependencies() {
super.didChangeDependencies();
colorPalette = CometChatThemeHelper.getColorPalette(context);
spacing = CometChatThemeHelper.getSpacing(context);
typography = CometChatThemeHelper.getTypography(context);
}
Do NOT use a _themeInitialized flag — it prevents theme updates on system theme changes.
Component Style Classes — merge() Pattern
Every component has a CometChat{Component}Style extending ThemeExtension. Resolved internally:
// Inside component's didChangeDependencies():
style = CometChatThemeHelper.getTheme<CometChatConversationsStyle>(
context: context,
defaultTheme: CometChatConversationsStyle.of,
).merge(widget.conversationsStyle);
Pass overrides via constructor:
CometChatConversations(
conversationsStyle: CometChatConversationsStyle(
backgroundColor: Colors.black,
),
)
Gotchas
colorPalette.white/black/transparentare NOT brightness-aware — useneutral50for brightness-aware white- Extended primary shades auto-generated from
primaryby blending with white (light) or black (dark)
Checklist — Theming
- Colors from
CometChatThemeHelper.getColorPalette(context), never hardcoded - Theme cached in
didChangeDependencies(), notbuild() - Custom theme registered as
ThemeExtensionon boththemeanddarkTheme - Component styles passed via constructor props