sendCustomMessage method
Future<void>
sendCustomMessage(
- String conversationID,
- ZIMConversationType conversationType, {
- required int customType,
- required String customMessage,
- String? searchedContent,
- FutureOr<
ZIMKitMessage> preMessageSending()?, - dynamic onMessageSent()?,
Implementation
Future<void> sendCustomMessage(
String conversationID,
ZIMConversationType conversationType, {
required int customType,
required String customMessage,
String? searchedContent,
FutureOr<ZIMKitMessage> Function(ZIMKitMessage)? preMessageSending,
Function(ZIMKitMessage)? onMessageSent,
}) async {
if (conversationID.isEmpty) {
ZIMKitLogger.warning('sendCustomMessage: conversationID is empty');
return;
}
// 1. create message
var kitMessage =
(ZIMCustomMessage(subType: customType, message: customMessage)
..searchedContent = searchedContent ?? '')
.toKIT();
final sendConfig = ZIMMessageSendConfig();
// 2. preMessageSending
kitMessage = (await preMessageSending?.call(kitMessage)) ?? kitMessage;
ZIMKitLogger.info(
'sendCustomMessage: customType: $customType, message: $customMessage');
// 3. re-generate zim
kitMessage.reGenerateZIMMessage();
// 3. call service
late ZIMKitMessageNotifier kitMessageNotifier;
await ZIM.getInstance()!.sendMessage(
kitMessage.zim,
conversationID,
conversationType,
sendConfig,
ZIMMessageSendNotification(
onMessageAttached: (zimMessage) {
kitMessageNotifier = db
.messages(conversationID, conversationType)
.onAttach(zimMessage);
},
),
).then((result) {
ZIMKitLogger.info(
'sendCustomMessage: success, customType: $customType, message: $customMessage');
kitMessageNotifier.value = result.message.toKIT();
onMessageSent?.call(kitMessageNotifier.value);
}).catchError((error) {
kitMessageNotifier.value =
(kitMessageNotifier.value.clone()..sendFailed(error));
return checkNeedReloginOrNot(error).then((retryCode) {
if (retryCode == 0) {
ZIMKitLogger.info('relogin success, retry sendCustomMessage');
sendCustomMessage(
conversationID,
conversationType,
customMessage: customMessage,
customType: customType,
searchedContent: searchedContent,
preMessageSending: preMessageSending,
onMessageSent: onMessageSent,
);
} else {
ZIMKitLogger.severe(
'sendCustomMessage: failed, error:$error, customType: $customType, message: $customMessage');
onMessageSent?.call(kitMessageNotifier.value);
throw error;
}
});
});
}