cometchat_cards
A Flutter renderer for the CometChat Card Schema. Pass in card JSON, get back a native Flutter widget tree. Taps on interactive elements are emitted to your app through a single callback — the package never executes actions itself.
What it does
- Parses Card Schema JSON into typed models
- Renders 20 element types (text, image, icon, avatar, badge, divider, spacer, chip, progressBar, codeBlock, markdown, row, column, grid, accordion, tabs, button, iconButton, link, table)
- Resolves theme-aware colors and image URLs for
auto,light, anddarkmodes, with optional theme overrides - Emits taps on buttons, icon buttons, and links to your
onActioncallback as typedCometChatCardActionEvents
The package is a pure renderer. It doesn't talk to the CometChat SDK, doesn't manage message lifecycle, and doesn't know about your app's navigation. You decide what each action does.
Installation
dependencies:
cometchat_cards: ^1.0.0
Usage
import 'package:cometchat_cards/cometchat_cards.dart';
import 'package:flutter/material.dart';
class CardScreen extends StatelessWidget {
const CardScreen({super.key, required this.cardJson});
final String cardJson;
@override
Widget build(BuildContext context) {
return CometChatCardView(
cardJson: cardJson,
themeMode: CometChatCardThemeMode.auto,
onAction: (event) {
// Handle the action — navigate, send a message, open a URL, etc.
debugPrint('action: ${event.type} from ${event.elementId}');
},
);
}
}
Theming
The renderer falls back to a built-in default theme when JSON omits colors. To
override defaults, pass a CometChatCardThemeOverride:
CometChatCardView(
cardJson: cardJson,
themeMode: CometChatCardThemeMode.dark,
themeOverride: CometChatCardThemeOverride(
primaryColor: const CometChatCardColorValue(
light: '#1A73E8',
dark: '#8AB4F8',
),
),
);
Any ColorValue in the schema is resolved to its light or dark variant
based on the effective theme mode.
Actions
When a user taps a button, iconButton, or link, the package invokes
onAction with a CometChatCardActionEvent containing:
type— one of the 9 supported action typesparams— action payload from the schemaelementId— id of the tapped elementcardJson— the card JSON the action originated from
If you don't pass onAction, taps are ignored.
More
See the example/ app for runnable samples and the design.md document for
the full schema reference.