外观
主题与品牌样式
优先使用公开主题参数调整品牌色、表面颜色、文字、气泡和圆角。需要少量变化时不必复制整个聊天页面,这样可以保留默认消息状态、媒体回收和键盘交互。
Flutter:设置明暗主题
MixinImThemeData 分别提供浅色与深色参数。以下配置使用密信蓝作为发送气泡,接收气泡随主题变化:
dart
import 'package:flutter/material.dart';
import 'package:mixinim_uikit/mixinim_uikit.dart';
const brandTheme = MixinImThemeData(
primaryColor: Color(0xFF1677FF),
darkPrimaryColor: Color(0xFF5C9DFF),
sentBubbleColor: Color(0xFF1677FF),
darkSentBubbleColor: Color(0xFF1677FF),
receivedBubbleColor: Color(0xFFFFFFFF),
darkReceivedBubbleColor: Color(0xFF26272C),
receivedBubbleBorderColor: Color(0xFFE5E6EB),
darkReceivedBubbleBorderColor: Color(0xFF36383E),
bubbleRadius: 12,
themeMode: ThemeMode.system,
);
const uiConfig = MixinImUIKitConfig(theme: brandTheme);将 uiConfig 传给 MixinImChatPage.sdk(...);独立列表接收相同 theme。宿主如果提供手动明暗切换,应将应用偏好同步到 UIKit,而不是只改变外层 Scaffold 的背景。
对单类消息做局部调整
消息样式解析器可以按类型、方向或群聊场景返回局部覆盖。下面片段假设 sdk 与 conversation 已就绪,仅调整文字消息圆角:
dart
final chat = MixinImChatPage.sdk(
sdk: sdk,
conversation: conversation,
config: uiConfig,
messageStyleResolver: (context, target) {
if (target.message.contentType != 'txt') return null;
return const MixinImMessageStyle(
borderRadius: BorderRadius.all(Radius.circular(10)),
);
},
);返回 null 保留默认样式;覆盖对象未填写的字段继续使用原值。该入口只影响视觉,不修改消息权限、发送状态或媒体行为。
主题、头像与整块替换的区别
| 需求 | 优先使用 |
|---|---|
| 全应用品牌色、背景、文字与气泡 | MixinImThemeData |
| 特定消息的背景、描边、圆角、宽度或元数据 | messageStyleResolver |
| 圆形/方形头像、边框、挂件、昵称样式 | userDecorationResolver 与头像样式配置 |
| 包裹已构建的消息内容 | Flutter 的 messageBubbleBuilder |
| 完全不同的会话行 | itemBuilder 等平台公开入口 |
整行替换后,宿主需要自行实现该行的头像、文案、点击和可访问性;它仍应使用 SDK 提供的公开快照。
跨平台品牌统一
Android/iOS 原生 UIKit 提供对应主题、头像与消息样式接入点,具体类型与参数按该平台 API 使用。Web、uni-app 与微信按组件的主题配置完成对应视觉,不能把 Flutter 的 Dart 对象直接传入。
各端沿用统一品牌规范与操作语义,系统选择器、权限弹窗和键盘保持对应平台的原生呈现。
调整后检查什么
分别检查浅色/深色、发送/接收、群昵称、引用、撤回、失败、置顶与长消息的展示,兼顾文字对比、点击范围、放大字体、键盘和系统安全区。