agentsclimarketplace

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.

Install
npx -y skills add cometchat/cometchat-skills --skill cometchat-flutter-v5-theming

Assembled 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 raw cometchat_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:

  1. CometChatColorPalette — colors (primary, neutral, alert, background, text, icon, button, border)
  2. CometChatSpacing — spacing, padding, margin, and radius tokens
  3. CometChatTypography — 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

TokenDescriptionLight DefaultDark Default
primaryBrand color#6852D6#604CC3
background14Surface backgroundsneutral50→neutral300neutral50→neutral300
textPrimaryMain textneutral900neutral900
textSecondarySecondary textneutral600neutral600
borderLightSubtle bordersneutral200neutral200
iconPrimaryMain iconsneutral900neutral900
iconSecondarySecondary iconsneutral500neutral500
iconHighlightHighlighted iconsprimaryprimary
errorError states#F44649#C73C3E
white / blackFixed (NOT brightness-aware)Colors.white / Colors.blackSame
transparentTransparentColors.transparentSame
neutral600Used for date styles

Extended primary shades (extendedPrimary50900) are auto-generated from primary. Override individually if needed.

Commonly Used Spacing Tokens

TokenDefault
padding / spacing / radius2
padding1 / spacing1 / radius14
padding2 / spacing2 / radius28
padding3 / spacing3 / radius312
padding4 / spacing4 / radius416
padding5 / spacing5 / radius520
padding6 / spacing624
radiusMax / spacingMax1000

Typography Tokens

CometChatTypography provides: heading1heading4, 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 / transparent are NOT brightness-aware — use neutral50 for brightness-aware white
  • Extended primary shades auto-generated from primary by blending with white (light) or black (dark)

Checklist — Theming

  • Colors from CometChatThemeHelper.getColorPalette(context), never hardcoded
  • Theme cached in didChangeDependencies(), not build()
  • Custom theme registered as ThemeExtension on both theme and darkTheme
  • Component styles passed via constructor props

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.