feat: Upgrade to 2.3.3

This commit is contained in:
anonymous 2023-10-27 15:38:08 +08:00
parent 038a3d483d
commit 9c11e66fd5
12 changed files with 326 additions and 829 deletions

View File

@ -1,3 +1,13 @@
# 2.3.3
## New Features
* Added a new lifecycle hook, `messageListShouldMount`.
## Bug Fixes
* Fixed an issue on time tag creator.
# 2.3.2
## Improvements

View File

@ -85,26 +85,26 @@ packages:
dependency: transitive
description:
name: cached_network_image
sha256: fd3d0dc1d451f9a252b32d95d3f0c3c487bc41a75eba2e6097cb0b9c71491b15
sha256: f98972704692ba679db144261172a8e20feb145636c617af0eb4022132a6797f
url: "https://pub.dev"
source: hosted
version: "3.2.3"
version: "3.3.0"
cached_network_image_platform_interface:
dependency: transitive
description:
name: cached_network_image_platform_interface
sha256: bb2b8403b4ccdc60ef5f25c70dead1f3d32d24b9d6117cfc087f496b178594a7
sha256: "56aa42a7a01e3c9db8456d9f3f999931f1e05535b5a424271e9a38cabf066613"
url: "https://pub.dev"
source: hosted
version: "2.0.0"
version: "3.0.0"
cached_network_image_web:
dependency: transitive
description:
name: cached_network_image_web
sha256: b8eb814ebfcb4dea049680f8c1ffb2df399e4d03bf7a352c775e26fa06e02fa0
sha256: "759b9a9f8f6ccbb66c185df805fac107f05730b1dab9c64626d1008cca532257"
url: "https://pub.dev"
source: hosted
version: "1.0.2"
version: "1.1.0"
camera:
dependency: transitive
description:
@ -237,18 +237,18 @@ packages:
dependency: transitive
description:
name: dart_internal
sha256: dae3976f383beddcfcd07ad5291a422df2c8c0a8a03c52cda63ac7b4f26e0f4e
sha256: "689dccc3d5f62affd339534cca548dce12b3a6b32f0f10861569d3025efc0567"
url: "https://pub.dev"
source: hosted
version: "0.2.8"
version: "0.2.9"
desktop_drop:
dependency: transitive
description:
name: desktop_drop
sha256: "4ca4d960f4b11c032e9adfd2a0a8ac615bc3fddb4cbe73dcf840dd8077582186"
sha256: d55a010fe46c8e8fcff4ea4b451a9ff84a162217bdb3b2a0aa1479776205e15d
url: "https://pub.dev"
source: hosted
version: "0.4.1"
version: "0.4.4"
device_info_plus:
dependency: transitive
description:
@ -414,14 +414,6 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
flutter_blurhash:
dependency: transitive
description:
name: flutter_blurhash
sha256: "05001537bd3fac7644fa6558b09ec8c0a3f2eba78c0765f88912882b1331a5c6"
url: "https://pub.dev"
source: hosted
version: "0.7.0"
flutter_cache_manager:
dependency: transitive
description:
@ -796,10 +788,10 @@ packages:
dependency: transitive
description:
name: octo_image
sha256: "107f3ed1330006a3bea63615e81cf637433f5135a52466c7caa0e7152bca9143"
sha256: "45b40f99622f11901238e18d48f5f12ea36426d8eced9f4cbf58479c7aa2430d"
url: "https://pub.dev"
source: hosted
version: "1.0.2"
version: "2.0.0"
open_file:
dependency: transitive
description:
@ -1211,7 +1203,7 @@ packages:
path: ".."
relative: true
source: path
version: "2.3.0"
version: "2.3.3-preview.0"
tencent_cloud_uikit_core:
dependency: transitive
description:
@ -1565,5 +1557,5 @@ packages:
source: hosted
version: "3.1.2"
sdks:
dart: ">=3.1.0-185.0.dev <3.2.0"
dart: ">=3.1.0-185.0.dev <3.3.0"
flutter: ">=3.13.0"

View File

@ -1,50 +1,46 @@
import 'package:flutter/cupertino.dart';
import 'package:tencent_im_base/tencent_im_base.dart';
import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_class.dart';
import 'package:tencent_im_base/tencent_im_base.dart';
typedef MessageFunction = Future<V2TimMessage?> Function(V2TimMessage message);
typedef MessageFunctionNullCallback = Function(V2TimValueCallback<V2TimMessage> res);
typedef MessageFunctionOptional = Future<V2TimMessage?> Function(
V2TimMessage message);
typedef MessageFunctionOptional = Future<V2TimMessage?> Function(V2TimMessage message);
typedef MessageListFunction = Future<List<V2TimMessage>> Function(
List<V2TimMessage> messageList);
typedef MessageListFunction = Future<List<V2TimMessage>> Function(List<V2TimMessage> messageList);
typedef MessageListFunctionAsync = List<V2TimMessage> Function(List<V2TimMessage> messageList);
typedef FutureBool = Future<bool>;
typedef AddFriendFunction = Function(
String userID, String? remark, String? friendGroup, String? addWording);
typedef AddFriendFunction = Function(String userID, String? remark, String? friendGroup, String? addWording);
typedef ConversationListFunction = Future<List<V2TimConversation?>> Function(
List<V2TimConversation?> conversationList);
typedef ConversationListFunction = Future<List<V2TimConversation?>> Function(List<V2TimConversation?> conversationList);
typedef FriendListFunction = Future<List<V2TimFriendInfo>> Function(
List<V2TimFriendInfo> friendList);
typedef FriendListFunction = Future<List<V2TimFriendInfo>> Function(List<V2TimFriendInfo> friendList);
typedef FriendInfoFunction = Future<V2TimFriendInfo?> Function(
V2TimFriendInfo? friendInfo);
typedef FriendInfoFunction = Future<V2TimFriendInfo?> Function(V2TimFriendInfo? friendInfo);
/// Here is the default life cycle hooks implementation for all the hooks in TUIKit.
abstract class DefaultLifeCycle {
static Future<List<V2TimConversation?>> defaultConversationListSolution(
List<V2TimConversation?> list) async {
static Future<List<V2TimConversation?>> defaultConversationListSolution(List<V2TimConversation?> list) async {
return list;
}
static Future<List<V2TimFriendInfo>> defaultFriendListSolution(
List<V2TimFriendInfo> list) async {
static Future<List<V2TimFriendInfo>> defaultFriendListSolution(List<V2TimFriendInfo> list) async {
return list;
}
static Future<V2TimMessage> defaultMessageSolution(
V2TimMessage message) async {
static Future<V2TimMessage> defaultMessageSolution(V2TimMessage message) async {
return message;
}
static Future<List<V2TimMessage>> defaultMessageListSolution(
List<V2TimMessage> list) async {
static Future<List<V2TimMessage>> defaultMessageListSolution(List<V2TimMessage> list) async {
return list;
}
static List<V2TimMessage> defaultMessageListSolutionAsync(List<V2TimMessage> list) {
return list;
}
@ -56,31 +52,23 @@ abstract class DefaultLifeCycle {
return true;
}
static defaultNullCallbackSolution(dynamic) {
}
static defaultNullCallbackSolution(dynamic) {}
static Future<bool> defaultAddFriend(
String userID, String? remark, String? friendGroup, String? addWording,
[BuildContext? context]) async {
static Future<bool> defaultAddFriend(String userID, String? remark, String? friendGroup, String? addWording, [BuildContext? context]) async {
return true;
}
static Future<bool> defaultAddGroup(String groupID, String message,
[BuildContext? context]) async {
static Future<bool> defaultAddGroup(String groupID, String message, [BuildContext? context]) async {
return true;
}
static Future<V2TimFriendInfo?> defaultFriendInfoSolution(
V2TimFriendInfo? friendInfo) async {
static Future<V2TimFriendInfo?> defaultFriendInfoSolution(V2TimFriendInfo? friendInfo) async {
return friendInfo;
}
static Future<void> defaultPopBackRemind() async {
// You have to implement the exact life cycle hook in this case.
TIMUIKitClass.onTIMCallback(TIMCallback(
type: TIMCallbackType.INFO,
infoRecommendText: TIM_t("请传入离开群组生命周期函数,提供返回首页或其他页面的导航方法。"),
infoCode: 6661402));
TIMUIKitClass.onTIMCallback(TIMCallback(type: TIMCallbackType.INFO, infoRecommendText: TIM_t("请传入离开群组生命周期函数,提供返回首页或其他页面的导航方法。"), infoCode: 6661402));
return;
}
}

View File

@ -34,16 +34,19 @@ class ChatLifeCycle {
/// Before rendering a message to message list.
bool Function(V2TimMessage msg) messageShouldMount;
/// Before all message will be rendered on the message list.
/// You may add or delete some messages here.
MessageListFunctionAsync messageListShouldMount;
ChatLifeCycle({
this.shouldClearHistoricalMessageList =
DefaultLifeCycle.defaultAsyncBooleanSolution,
this.shouldClearHistoricalMessageList = DefaultLifeCycle.defaultAsyncBooleanSolution,
this.shouldDeleteMessage = DefaultLifeCycle.defaultAsyncBooleanSolution,
this.messageDidSend = DefaultLifeCycle.defaultNullCallbackSolution,
this.didGetHistoricalMessageList =
DefaultLifeCycle.defaultMessageListSolution,
this.didGetHistoricalMessageList = DefaultLifeCycle.defaultMessageListSolution,
this.messageWillSend = DefaultLifeCycle.defaultMessageSolution,
this.modifiedMessageWillMount = DefaultLifeCycle.defaultMessageSolution,
this.newMessageWillMount = DefaultLifeCycle.defaultMessageSolution,
this.messageShouldMount = DefaultLifeCycle.defaultBooleanSolution,
this.messageListShouldMount = DefaultLifeCycle.defaultMessageListSolutionAsync,
});
}

View File

@ -4,6 +4,7 @@ import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'dart:math';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_class.dart';
@ -14,18 +15,13 @@ import 'package:tencent_cloud_chat_uikit/data_services/message/message_services.
import 'package:tencent_cloud_chat_uikit/data_services/services_locatar.dart';
import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart';
import 'package:tencent_cloud_chat_uikit/ui/constants/history_message_constant.dart';
import 'package:tencent_cloud_chat_uikit/ui/utils/message.dart';
import 'package:tencent_cloud_chat_uikit/ui/utils/logger.dart';
import 'package:tencent_cloud_chat_uikit/ui/utils/message.dart';
import 'package:tencent_cloud_chat_uikit/ui/utils/platform.dart';
enum ConvType { none, c2c, group }
enum HistoryMessagePosition {
bottom,
inTwoScreen,
awayTwoScreen,
notShowLatest
}
enum HistoryMessagePosition { bottom, inTwoScreen, awayTwoScreen, notShowLatest }
class CurrentConversation {
final String conversationID;
@ -49,8 +45,7 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
ChatLifeCycle? _lifeCycle;
bool _isDownloading = false;
final List<Map<String, String>> _waitingDownloadList =
List.empty(growable: true); // example {"savePath":"","url":"",msgId:""}
final List<Map<String, String>> _waitingDownloadList = List.empty(growable: true); // example {"savePath":"","url":"",msgId:""}
int _totalUnreadCount = 0;
String localKeyPrefix = "TUIKit_conversation_stored_";
String localMsgIDListKey = "TUIKit_conversation_list";
@ -63,8 +58,7 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
TIMUIKitChatConfig chatConfig = const TIMUIKitChatConfig();
List<V2TimGroupApplication>? _groupApplicationList;
String Function(V2TimMessage message)? _abstractMessageBuilder;
final Map<String, int> _c2cMessageEditStatusMap =
Map.from({}); // 0 normal 1 sending
final Map<String, int> _c2cMessageEditStatusMap = Map.from({}); // 0 normal 1 sending
final Map<String, bool> _c2cMessageFromUserActiveMap = Map.from({});
final Map<String, Timer> _c2cMessageActiveTimer = Map.from({});
bool _showC2cMessageEditStatus = true;
@ -91,8 +85,7 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
onRecvMessageModified: (V2TimMessage newMsg) {
onMessageModified(newMsg);
},
onMessageDownloadProgressCallback:
(V2TimMessageDownloadProgress messageProgress) {
onMessageDownloadProgressCallback: (V2TimMessageDownloadProgress messageProgress) {
onMessageDownloadProgressCallback(messageProgress);
},
);
@ -188,24 +181,15 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
int get unreadCountForConversation => _unreadCountForConversation;
List<V2TimGroupApplication> get groupApplicationList =>
_groupApplicationList ?? [];
List<V2TimGroupApplication> get groupApplicationList => _groupApplicationList ?? [];
String Function(V2TimMessage message)? get abstractMessageBuilder =>
_abstractMessageBuilder;
String Function(V2TimMessage message)? get abstractMessageBuilder => _abstractMessageBuilder;
Map<String, V2TimMessageReceipt> get messageReadReceiptMap =>
_messageReadReceiptMap;
Map<String, V2TimMessageReceipt> get messageReadReceiptMap => _messageReadReceiptMap;
String get currentSelectedConv => _currentConversationList.isNotEmpty
? _currentConversationList[_currentConversationList.length - 1]
.conversationID
: "";
String get currentSelectedConv => _currentConversationList.isNotEmpty ? _currentConversationList[_currentConversationList.length - 1].conversationID : "";
ConvType? get currentSelectedConvType => _currentConversationList.isNotEmpty
? _currentConversationList[_currentConversationList.length - 1]
.conversationType
: null;
ConvType? get currentSelectedConvType => _currentConversationList.isNotEmpty ? _currentConversationList[_currentConversationList.length - 1].conversationType : null;
setCurrentConversation(CurrentConversation value) {
_currentConversationList.add(value);
@ -214,9 +198,7 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
clearCurrentConversation() {
// Only keep the last 20 messages when existing a chat.
_messageListMap[currentSelectedConv] =
(_messageListMap[currentSelectedConv] ?? []).sublist(
max(0, ((_messageListMap[currentSelectedConv] ?? []).length - 20)));
_messageListMap[currentSelectedConv] = (_messageListMap[currentSelectedConv] ?? []).sublist(max(0, ((_messageListMap[currentSelectedConv] ?? []).length - 20)));
_currentConversationList.removeLast();
// notifyListeners();
}
@ -239,8 +221,7 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
_c2cMessageEditStatusMap[userID] = 0;
}
}
_c2cMessageStatusShowTimer[userID] =
Timer.periodic(const Duration(seconds: 5), (timer) {
_c2cMessageStatusShowTimer[userID] = Timer.periodic(const Duration(seconds: 5), (timer) {
_c2cMessageEditStatusMap[userID] = 0;
Timer? t = _c2cMessageStatusShowTimer[userID];
if (t != null && t.isActive) {
@ -282,23 +263,17 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
chatConfig = config;
}
initMessageMapFromLocalDatabase(
List<V2TimConversation?> conversations) async {
initMessageMapFromLocalDatabase(List<V2TimConversation?> conversations) async {
int index = 0;
for (V2TimConversation? conversationItem in conversations) {
if (conversationItem == null || conversationItem.type == null) {
return;
}
final conversationID = conversationItem.userID ??
conversationItem.groupID ??
conversationItem.conversationID;
if (messageListMap[conversationID] == null ||
messageListMap[conversationID]!.isEmpty) {
final conversationID = conversationItem.userID ?? conversationItem.groupID ?? conversationItem.conversationID;
if (messageListMap[conversationID] == null || messageListMap[conversationID]!.isEmpty) {
index++;
Future.delayed(Duration(milliseconds: 500 * index), () {
preloadMessageForConversation(
conversationID: conversationID,
conversationType: ConvType.values[conversationItem.type!]);
preloadMessageForConversation(conversationID: conversationID, conversationType: ConvType.values[conversationItem.type!]);
});
}
}
@ -309,12 +284,8 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
required String conversationID,
}) async {
final response = await _messageService.getHistoryMessageList(
count: 10,
getType: HistoryMsgGetTypeEnum.V2TIM_GET_LOCAL_OLDER_MSG,
userID: conversationType == ConvType.c2c ? conversationID : null,
groupID: conversationType == ConvType.group ? conversationID : null);
if (_messageListMap[conversationID] == null ||
_messageListMap[conversationID]!.isEmpty) {
count: 10, getType: HistoryMsgGetTypeEnum.V2TIM_GET_LOCAL_OLDER_MSG, userID: conversationType == ConvType.c2c ? conversationID : null, groupID: conversationType == ConvType.group ? conversationID : null);
if (_messageListMap[conversationID] == null || _messageListMap[conversationID]!.isEmpty) {
_messageListMap[conversationID] = response;
}
}
@ -332,15 +303,9 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
prefs.remove(localMsgIDListKey);
}
Future<void> updateMessageFromController(
{required String msgID,
required String conversationID,
required ConvType conversationType}) async {
Future<void> updateMessageFromController({required String msgID, required String conversationID, required ConvType conversationType}) async {
final TUIChatModelTools tools = serviceLocator<TUIChatModelTools>();
V2TimMessage? newMessage = await tools.getExistingMessageByID(
msgID: msgID,
conversationID: conversationID,
conversationType: conversationType);
V2TimMessage? newMessage = await tools.getExistingMessageByID(msgID: msgID, conversationID: conversationID, conversationType: conversationType);
if (newMessage != null) {
onMessageModified(newMessage, currentSelectedConv);
}
@ -363,14 +328,10 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
}
_preLoadImage(List<V2TimMessage> msgList) {
List<V2TimMessage> needPreViewList =
msgList.sublist(0, max(0, min(5, msgList.length - 1)));
List<V2TimMessage> needPreViewList = msgList.sublist(0, max(0, min(5, msgList.length - 1)));
for (var msgItem in needPreViewList) {
V2TimImage? getImageFromList(V2TimImageTypesEnum imgType) {
V2TimImage? img = MessageUtils.getImageFromImgList(
msgItem.imageElem?.imageList,
HistoryMessageDartConstant.imgPriorMap[imgType] ??
HistoryMessageDartConstant.oriImgPrior);
V2TimImage? img = MessageUtils.getImageFromImgList(msgItem.imageElem?.imageList, HistoryMessageDartConstant.imgPriorMap[imgType] ?? HistoryMessageDartConstant.oriImgPrior);
return img;
}
@ -380,12 +341,9 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
ImageConfiguration configuration = const ImageConfiguration();
final image = FileImage(File((originalImg.localUrl!)));
image.resolve(configuration).addListener(
ImageStreamListener((ImageInfo image, bool synchronousCall) {
image.resolve(configuration).addListener(ImageStreamListener((ImageInfo image, bool synchronousCall) {
final tempImg = image.image;
_preloadImageMap[msgItem.seq! +
msgItem.timestamp.toString() +
(msgItem.msgID ?? "")] = tempImg;
_preloadImageMap[msgItem.seq! + msgItem.timestamp.toString() + (msgItem.msgID ?? "")] = tempImg;
outputLogger.i("cacheImage ${msgItem.msgID}");
}));
} catch (e) {
@ -429,8 +387,7 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
_editStatusCheck(V2TimMessage msg) {
bool isStatusMessage = false;
if (msg.customElem != null &&
TencentUtils.checkString(msg.groupID) == null) {
if (msg.customElem != null && TencentUtils.checkString(msg.groupID) == null) {
V2TimCustomElem customElem = msg.customElem!;
String sender = msg.sender ?? "";
if (customElem.data!.isNotEmpty) {
@ -450,8 +407,7 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
if (userAction != null) {
if (userAction == 14) {
if (actionParam != null) {
setC2cMessageEditStatus(sender,
actionParam == "EIMAMSG_InputStatus_Ing" ? 1 : 0);
setC2cMessageEditStatus(sender, actionParam == "EIMAMSG_InputStatus_Ing" ? 1 : 0);
}
}
}
@ -486,8 +442,7 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
t.cancel();
}
}
_c2cMessageActiveTimer[msg.sender ?? ""] =
Timer.periodic(const Duration(seconds: 30), (timer) {
_c2cMessageActiveTimer[msg.sender ?? ""] = Timer.periodic(const Duration(seconds: 30), (timer) {
_c2cMessageFromUserActiveMap[msg.sender ?? ""] = false;
Timer? t = _c2cMessageActiveTimer[msg.sender ?? ""];
if (t != null && t.isActive) {
@ -511,15 +466,7 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
return;
}
V2TimMsgCreateInfoResult? res = await _messageService.createCustomMessage(
data: json.encode({
"businessID": "user_typing_status",
"typingStatus": isEditing == true ? 1 : 0,
"userAction": 14,
"version": 0,
"actionParam": isEditing == true
? "EIMAMSG_InputStatus_Ing"
: "EIMAMSG_InputStatus_End"
}));
data: json.encode({"businessID": "user_typing_status", "typingStatus": isEditing == true ? 1 : 0, "userAction": 14, "version": 0, "actionParam": isEditing == true ? "EIMAMSG_InputStatus_Ing" : "EIMAMSG_InputStatus_End"}));
if (res != null) {
_sendMessage(
id: res.id!,
@ -555,9 +502,7 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
}
_onReceiveNewMsg(V2TimMessage msgComing) async {
final V2TimMessage? newMsg = _lifeCycle?.newMessageWillMount != null
? await _lifeCycle?.newMessageWillMount(msgComing)
: msgComing;
final V2TimMessage? newMsg = _lifeCycle?.newMessageWillMount != null ? await _lifeCycle?.newMessageWillMount(msgComing) : msgComing;
if (newMsg == null) {
return;
}
@ -571,16 +516,13 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
_checkFromUserisActive(msgComing);
final convID = TencentUtils.checkString(newMsg.userID) ?? newMsg.groupID;
final convType = TencentUtils.checkString(newMsg.groupID) != null
? ConvType.group
: ConvType.c2c;
final convType = TencentUtils.checkString(newMsg.groupID) != null ? ConvType.group : ConvType.c2c;
if (convID != null && convID == currentSelectedConv) {
final position = getMessageListPosition(convID);
if (position == HistoryMessagePosition.notShowLatest) {
return;
}
if (position == HistoryMessagePosition.bottom &&
unreadCountForConversation == 0) {
if (position == HistoryMessagePosition.bottom && unreadCountForConversation == 0) {
_unreadCountForConversation = 0;
if (chatConfig.isAutoReportRead) {
Future.delayed(const Duration(seconds: 1), () {
@ -596,11 +538,7 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
notifyListeners();
final messageID = newMsg.msgID;
final needReadReceipt = newMsg.needReadReceipt ?? false;
if (needReadReceipt &&
messageID != null &&
msgComing.groupID != null &&
chatConfig.isReportGroupReadingStatus &&
chatConfig.isAutoReportRead) {
if (needReadReceipt && messageID != null && msgComing.groupID != null && chatConfig.isReportGroupReadingStatus && chatConfig.isAutoReportRead) {
// only group message send message read receipt
Future.delayed(const Duration(seconds: 1), () {
sendMessageReadReceipts([messageID]);
@ -623,19 +561,16 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
}
sendMessageReadReceipts(List<String> messageIDList) async {
final res = await _messageService.sendMessageReadReceipts(
messageIDList: messageIDList);
final res = await _messageService.sendMessageReadReceipts(messageIDList: messageIDList);
return res;
}
onMessageRevoked(String msgID, [String? convID]) {
final activeMessageList = _messageListMap[convID ?? currentSelectedConv];
if (activeMessageList != null) {
final findeIndex =
activeMessageList.indexWhere((element) => element.msgID == msgID);
final findeIndex = activeMessageList.indexWhere((element) => element.msgID == msgID);
if (findeIndex != -1) {
final findeIndex =
activeMessageList.indexWhere((element) => element.msgID == msgID);
final findeIndex = activeMessageList.indexWhere((element) => element.msgID == msgID);
if (findeIndex != -1) {
final targetItem = activeMessageList[findeIndex];
targetItem.status = MessageStatus.V2TIM_MSG_STATUS_LOCAL_REVOKED;
@ -650,15 +585,12 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
onMessageModified(V2TimMessage modifiedMessage, [String? convID]) async {
modifiedMessage.id = DateTime.now().millisecondsSinceEpoch.toString();
final String? exactId = TencentUtils.checkString(modifiedMessage.userID) ??
TencentUtils.checkString(modifiedMessage.groupID);
final String? exactId = TencentUtils.checkString(modifiedMessage.userID) ?? TencentUtils.checkString(modifiedMessage.groupID);
final activeMessageList = _messageListMap[convID ?? exactId];
if (activeMessageList == null || activeMessageList.isEmpty) {
return;
}
final V2TimMessage newMsg =
await _lifeCycle?.modifiedMessageWillMount(modifiedMessage) ??
modifiedMessage;
final V2TimMessage newMsg = await _lifeCycle?.modifiedMessageWillMount(modifiedMessage) ?? modifiedMessage;
final msgID = newMsg.msgID;
_messageListMap[convID ?? exactId ?? ""] = activeMessageList.map((item) {
if (item.msgID == msgID) {
@ -704,13 +636,11 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
outputLogger.i("message progress: $progress");
}
Future<void> onMessageDownloadProgressCallback(
V2TimMessageDownloadProgress messageProgress) async {
Future<void> onMessageDownloadProgressCallback(V2TimMessageDownloadProgress messageProgress) async {
final currentProgress = getMessageProgress(messageProgress.msgID);
if (messageProgress.isFinish && currentProgress < 100) {
V2TimMessage? message =
await _findAndRetrieveMessage(messageProgress.msgID);
V2TimMessage? message = await _findAndRetrieveMessage(messageProgress.msgID);
_handleFinishedDownload(messageProgress, message);
return;
}
@ -719,25 +649,19 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
}
Future<V2TimMessage?> _findAndRetrieveMessage(String messageId) async {
final messages =
await _messageService.findMessages(messageIDList: [messageId]);
final messages = await _messageService.findMessages(messageIDList: [messageId]);
return messages?.first;
}
void _handleFinishedDownload(
V2TimMessageDownloadProgress messageProgress, V2TimMessage? message) {
void _handleFinishedDownload(V2TimMessageDownloadProgress messageProgress, V2TimMessage? message) {
if (message != null) {
bool isImageType =
message.elemType == MessageElemType.V2TIM_ELEM_TYPE_IMAGE;
bool isVideoType =
message.elemType == MessageElemType.V2TIM_ELEM_TYPE_VIDEO;
bool isImageType = message.elemType == MessageElemType.V2TIM_ELEM_TYPE_IMAGE;
bool isVideoType = message.elemType == MessageElemType.V2TIM_ELEM_TYPE_VIDEO;
final originalImageType = PlatformUtils().isIOS ? 1 : 0;
if (!isImageType && !isVideoType) {
_updateMessageLocationAndDownloadFile(messageProgress);
} else if ((isImageType && messageProgress.type == originalImageType) ||
isVideoType) {
Future.delayed(const Duration(seconds: 1),
() => _updateMessageAndDownloadFile(message, messageProgress));
} else if ((isImageType && messageProgress.type == originalImageType) || isVideoType) {
Future.delayed(const Duration(seconds: 1), () => _updateMessageAndDownloadFile(message, messageProgress));
} else {
return;
}
@ -746,32 +670,22 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
}
}
void _updateMessageAndDownloadFile(
V2TimMessage message, V2TimMessageDownloadProgress messageProgress) {
updateAsyncMessage(
message,
TencentUtils.checkString(message.userID) ??
TencentUtils.checkString(message.groupID) ??
"");
void _updateMessageAndDownloadFile(V2TimMessage message, V2TimMessageDownloadProgress messageProgress) {
updateAsyncMessage(message, TencentUtils.checkString(message.userID) ?? TencentUtils.checkString(message.groupID) ?? "");
_updateMessageLocationAndDownloadFile(messageProgress);
}
void _updateMessageLocationAndDownloadFile(
V2TimMessageDownloadProgress messageProgress) {
void _updateMessageLocationAndDownloadFile(V2TimMessageDownloadProgress messageProgress) {
setFileMessageLocation(messageProgress.msgID, messageProgress.path);
setMessageProgress(messageProgress.msgID, 100);
downloadFile();
}
void _updateProgressIfNeeded(
V2TimMessageDownloadProgress messageProgress, int currentProgress) {
void _updateProgressIfNeeded(V2TimMessageDownloadProgress messageProgress, int currentProgress) {
try {
if (messageProgress.totalSize != -1 && !messageProgress.isFinish) {
int progress = min(
99,
(messageProgress.currentSize / messageProgress.totalSize * 100)
.floor());
int progress = min(99, (messageProgress.currentSize / messageProgress.totalSize * 100).floor());
if (progress > 1 && progress > currentProgress) {
setMessageProgress(messageProgress.msgID, progress);
}
@ -815,13 +729,10 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
final TUIChatModelTools tools = serviceLocator<TUIChatModelTools>();
List<V2TimMessage> currentHistoryMsgList = _messageListMap[convID] ?? [];
if (messageInfo != null) {
final messageInfoWithSender = messageInfo.sender == null
? tools.setUserInfoForMessage(messageInfo, messageInfo.id!)
: messageInfo;
final messageInfoWithSender = messageInfo.sender == null ? tools.setUserInfoForMessage(messageInfo, messageInfo.id!) : messageInfo;
currentHistoryMsgList = [messageInfoWithSender, ...currentHistoryMsgList];
setMessageList(convID, currentHistoryMsgList);
if (loadingMessage[convID] != null &&
loadingMessage[convID]!.isNotEmpty) {
if (loadingMessage[convID] != null && loadingMessage[convID]!.isNotEmpty) {
loadingMessage[convID]!.add(messageInfoWithSender);
} else {
loadingMessage[convID] = <V2TimMessage>[messageInfoWithSender];
@ -837,9 +748,7 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
setInputField: setInputField,
id: messageInfo.id as String,
convType: ConvType.values[convType.index],
offlinePushInfo: offlinePushInfo ??
tools.buildMessagePushInfo(
messageInfo, convID, ConvType.values[convType.index]),
offlinePushInfo: offlinePushInfo ?? tools.buildMessagePushInfo(messageInfo, convID, ConvType.values[convType.index]),
);
}
return null;
@ -863,36 +772,23 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
}
final TUIChatModelTools tools = serviceLocator<TUIChatModelTools>();
List<V2TimMessage> currentHistoryMsgList = _messageListMap[convID] ?? [];
V2TimMsgCreateInfoResult? textMessageInfo =
await _messageService.createTextMessage(text: text);
V2TimMsgCreateInfoResult? textMessageInfo = await _messageService.createTextMessage(text: text);
textMessageInfo = await _messageService.createTextAtMessage(
text: text +
"\n@${TencentUtils.checkString(messageBeenReplied.nickName) ?? TencentUtils.checkString(messageBeenReplied.sender) ?? TencentUtils.checkString(messageBeenReplied.userID)}",
atUserList: [
TencentUtils.checkString(messageBeenReplied.sender) ??
TencentUtils.checkString(messageBeenReplied.userID) ??
""
]);
text: text + "\n@${TencentUtils.checkString(messageBeenReplied.nickName) ?? TencentUtils.checkString(messageBeenReplied.sender) ?? TencentUtils.checkString(messageBeenReplied.userID)}",
atUserList: [TencentUtils.checkString(messageBeenReplied.sender) ?? TencentUtils.checkString(messageBeenReplied.userID) ?? ""]);
final V2TimMessage? messageInfo = textMessageInfo!.messageInfo;
if (messageInfo != null) {
final messageInfoWithSender = messageInfo.sender == null
? tools.setUserInfoForMessage(
messageInfo, messageInfo.id ?? textMessageInfo.id ?? "")
: messageInfo;
final messageInfoWithSender = messageInfo.sender == null ? tools.setUserInfoForMessage(messageInfo, messageInfo.id ?? textMessageInfo.id ?? "") : messageInfo;
final hasNickName = messageBeenReplied.nickName != null &&
messageBeenReplied.nickName != "";
final hasNickName = messageBeenReplied.nickName != null && messageBeenReplied.nickName != "";
final cloudCustomData = {
"messageReply": {
"messageID": messageBeenReplied.msgID,
"messageAbstract": tools.getMessageAbstract(
messageBeenReplied, abstractMessageBuilder),
"messageSender": hasNickName
? messageBeenReplied.nickName
: messageBeenReplied.sender,
"messageAbstract": tools.getMessageAbstract(messageBeenReplied, abstractMessageBuilder),
"messageSender": hasNickName ? messageBeenReplied.nickName : messageBeenReplied.sender,
"messageType": messageBeenReplied.elemType,
"version": 1
}
@ -905,9 +801,7 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
return _sendMessage(
cloudCustomData: json.encode(cloudCustomData),
id: textMessageInfo.id as String,
offlinePushInfo: offlinePushInfo ??
tools.buildMessagePushInfo(
messageInfo, convID, ConvType.values[convType.index]),
offlinePushInfo: offlinePushInfo ?? tools.buildMessagePushInfo(messageInfo, convID, ConvType.values[convType.index]),
priority: priority,
onlineUserOnly: onlineUserOnly,
isExcludedFromUnreadCount: isExcludedFromUnreadCount,
@ -921,10 +815,8 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
return null;
}
Future<bool> setLocalCustomData(
String msgID, String localCustomData, String conversationID) async {
final res = await _messageService.setLocalCustomData(
msgID: msgID, localCustomData: localCustomData);
Future<bool> setLocalCustomData(String msgID, String localCustomData, String conversationID) async {
final res = await _messageService.setLocalCustomData(msgID: msgID, localCustomData: localCustomData);
List<V2TimMessage> messageList = _messageListMap[conversationID] ?? [];
if (res.code == 0) {
messageList = messageList.map((item) {
@ -934,17 +826,14 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
}
return item;
}).toList();
setMessageList(conversationID, messageList,
needResetNewMessageCount: false);
setMessageList(conversationID, messageList, needResetNewMessageCount: false);
return true;
}
return false;
}
Future<bool> setLocalCustomInt(
String msgID, int localCustomInt, String conversationID) async {
final res = await _messageService.setLocalCustomInt(
msgID: msgID, localCustomInt: localCustomInt);
Future<bool> setLocalCustomInt(String msgID, int localCustomInt, String conversationID) async {
final res = await _messageService.setLocalCustomInt(msgID: msgID, localCustomInt: localCustomInt);
List<V2TimMessage> messageList = _messageListMap[conversationID] ?? [];
if (res.code == 0) {
messageList = messageList.map((item) {
@ -954,8 +843,7 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
}
return item;
}).toList();
setMessageList(conversationID, messageList,
needResetNewMessageCount: false);
setMessageList(conversationID, messageList, needResetNewMessageCount: false);
return true;
}
return false;
@ -978,20 +866,15 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
}) async {
String receiver = convType == ConvType.c2c ? convID : '';
String groupID = convType == ConvType.group ? convID : '';
final oldGroupType =
groupType != null ? GroupReceptAllowType.values[groupType.index] : null;
final oldGroupType = groupType != null ? GroupReceptAllowType.values[groupType.index] : null;
final sendMsgRes = await _messageService.sendMessage(
id: id,
receiver: receiver,
needReadReceipt: needReadReceipt ??
chatConfig.isShowGroupReadingStatus &&
convType == ConvType.group &&
((chatConfig.groupReadReceiptPermissionList != null &&
chatConfig.groupReadReceiptPermissionList!
.contains(groupType)) ||
(chatConfig.groupReadReceiptPermisionList != null &&
chatConfig.groupReadReceiptPermisionList!
.contains(oldGroupType))),
((chatConfig.groupReadReceiptPermissionList != null && chatConfig.groupReadReceiptPermissionList!.contains(groupType)) ||
(chatConfig.groupReadReceiptPermisionList != null && chatConfig.groupReadReceiptPermisionList!.contains(oldGroupType))),
groupID: groupID,
priority: priority,
localCustomData: localCustomData,
@ -1015,8 +898,7 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
return sendMsgRes;
}
void setMessageList(String conversationID, List<V2TimMessage> messageList,
{bool needResetNewMessageCount = true}) {
void setMessageList(String conversationID, List<V2TimMessage> messageList, {bool needResetNewMessageCount = true}) {
_messageListMap[conversationID] = messageList;
if (needResetNewMessageCount) {
_receivedNewMessageCount = 0;
@ -1024,27 +906,15 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
notifyListeners();
}
updateMessage(
V2TimValueCallback<V2TimMessage> sendMsgRes,
String convID,
String id,
ConvType convType,
GroupReceiptAllowType? groupType,
ValueChanged<String>? setInputField) {
updateMessage(V2TimValueCallback<V2TimMessage> sendMsgRes, String convID, String id, ConvType convType, GroupReceiptAllowType? groupType, ValueChanged<String>? setInputField) {
List<V2TimMessage> currentHistoryMsgList = _messageListMap[convID] ?? [];
final V2TimMessage sendMsgResData = sendMsgRes.data as V2TimMessage;
if ([80001, 80002].contains(sendMsgRes.code) &&
sendMsgRes.data?.textElem?.text != null &&
setInputField != null) {
if ([80001, 80002].contains(sendMsgRes.code) && sendMsgRes.data?.textElem?.text != null && setInputField != null) {
setInputField(sendMsgRes.data!.textElem!.text ?? "");
}
final findIdIndex =
currentHistoryMsgList.indexWhere((element) => element.id == id);
final targetIndex = findIdIndex == -1
? currentHistoryMsgList
.indexWhere((element) => element.msgID == sendMsgResData.msgID)
: findIdIndex;
final findIdIndex = currentHistoryMsgList.indexWhere((element) => element.id == id);
final targetIndex = findIdIndex == -1 ? currentHistoryMsgList.indexWhere((element) => element.msgID == sendMsgResData.msgID) : findIdIndex;
if (targetIndex != -1) {
currentHistoryMsgList[targetIndex] = sendMsgResData;
} else {
@ -1053,19 +923,13 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
if (loadingMessage[convID] != null && loadingMessage[convID]!.isNotEmpty) {
loadingMessage[convID]!.removeWhere((element) => element.id == id);
}
final oldGroupType =
groupType != null ? GroupReceptAllowType.values[groupType.index] : null;
final oldGroupType = groupType != null ? GroupReceptAllowType.values[groupType.index] : null;
if (chatConfig.isShowGroupReadingStatus &&
convType == ConvType.group &&
sendMsgRes.data?.msgID != null &&
((chatConfig.groupReadReceiptPermissionList != null &&
chatConfig.groupReadReceiptPermissionList!
.contains(groupType)) ||
(chatConfig.groupReadReceiptPermisionList != null &&
chatConfig.groupReadReceiptPermisionList!
.contains(oldGroupType)))) {
_messageReadReceiptMap[sendMsgRes.data!.msgID!] =
V2TimMessageReceipt(timestamp: 0, userID: "", readCount: 0);
((chatConfig.groupReadReceiptPermissionList != null && chatConfig.groupReadReceiptPermissionList!.contains(groupType)) ||
(chatConfig.groupReadReceiptPermisionList != null && chatConfig.groupReadReceiptPermisionList!.contains(oldGroupType)))) {
_messageReadReceiptMap[sendMsgRes.data!.msgID!] = V2TimMessageReceipt(timestamp: 0, userID: "", readCount: 0);
}
_messageListMap[convID] = currentHistoryMsgList;
notifyListeners();
@ -1094,20 +958,13 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
}
List<V2TimMessage>? getMessageList(String conversationID) {
final list = (messageListMap[conversationID]?.reversed.toList() ?? [])
.where((element) => _lifeCycle?.messageShouldMount(element) ?? true);
final list = (messageListMap[conversationID]?.reversed.toList() ?? []).where((element) => _lifeCycle?.messageShouldMount(element) ?? true).toList();
final finalList = _lifeCycle?.messageListShouldMount(list) ?? list;
final List<V2TimMessage> listWithTimestamp = [];
final interval = chatConfig.timeDividerConfig?.timeInterval ?? 300;
for (var item in list) {
for (var item in finalList) {
{
if (listWithTimestamp.isEmpty ||
(listWithTimestamp[listWithTimestamp.length - 1].timestamp !=
null &&
item.timestamp != null &&
(item.timestamp! -
listWithTimestamp[listWithTimestamp.length - 1]
.timestamp! >
interval))) {
if (listWithTimestamp.isEmpty || (listWithTimestamp[listWithTimestamp.length - 1].timestamp != null && item.timestamp != null && (item.timestamp! - listWithTimestamp[listWithTimestamp.length - 1].timestamp! > interval))) {
listWithTimestamp.add(V2TimMessage(
userID: '',
isSelf: false,
@ -1123,19 +980,16 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
}
HistoryMessagePosition getMessageListPosition(String? conversationID) {
final HistoryMessagePosition? position =
_historyMessagePositionMap[conversationID];
final HistoryMessagePosition? position = _historyMessagePositionMap[conversationID];
if (position == null) {
_historyMessagePositionMap[conversationID ?? currentSelectedConv] =
HistoryMessagePosition.bottom;
_historyMessagePositionMap[conversationID ?? currentSelectedConv] = HistoryMessagePosition.bottom;
return HistoryMessagePosition.bottom;
} else {
return position;
}
}
void setMessageListPosition(
String conversationID, HistoryMessagePosition position) {
void setMessageListPosition(String conversationID, HistoryMessagePosition position) {
_historyMessagePositionMap[conversationID] = position;
notifyListeners();
}

View File

@ -3,11 +3,11 @@
import 'dart:math';
import 'package:flutter/foundation.dart';
import 'package:tencent_im_base/tencent_im_base.dart';
import 'package:tencent_cloud_chat_uikit/data_services/core/core_services_implements.dart';
import 'package:tencent_cloud_chat_uikit/data_services/message/message_services.dart';
import 'package:tencent_cloud_chat_uikit/data_services/services_locatar.dart';
import 'package:tencent_cloud_chat_uikit/ui/utils/platform.dart';
import 'package:tencent_im_base/tencent_im_base.dart';
class MessageServiceImpl extends MessageService {
final CoreServicesImpl _coreService = serviceLocator<CoreServicesImpl>();
@ -16,8 +16,7 @@ class MessageServiceImpl extends MessageService {
@override
Future<MessageListResponse> getHistoryMessageListV2({
HistoryMsgGetTypeEnum getType =
HistoryMsgGetTypeEnum.V2TIM_GET_LOCAL_OLDER_MSG,
HistoryMsgGetTypeEnum getType = HistoryMsgGetTypeEnum.V2TIM_GET_LOCAL_OLDER_MSG,
String? userID,
String? groupID,
int lastMsgSeq = -1,
@ -26,16 +25,8 @@ class MessageServiceImpl extends MessageService {
List<int>? messageTypeList,
}) async {
bool haveMoreData = true;
final res = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.getHistoryMessageList(
count: count,
getType: getType,
userID: userID,
groupID: groupID,
lastMsgID: lastMsgID,
lastMsgSeq: lastMsgSeq,
messageTypeList: messageTypeList);
final res =
await TencentImSDKPlugin.v2TIMManager.getMessageManager().getHistoryMessageList(count: count, getType: getType, userID: userID, groupID: groupID, lastMsgID: lastMsgID, lastMsgSeq: lastMsgSeq, messageTypeList: messageTypeList);
final List<V2TimMessage> responsedMessageList = res.data ?? [];
final conversationID = userID ?? groupID;
final cachedMessageList = messgaeListMap[conversationID];
@ -45,41 +36,29 @@ class MessageServiceImpl extends MessageService {
combinedMessageList = [...cachedMessageList, ...responsedMessageList];
//
} else {
final bool existSendingMessage = sendingMessage[conversationID] != null &&
sendingMessage[conversationID]!.isNotEmpty;
final bool existSendingMessage = sendingMessage[conversationID] != null && sendingMessage[conversationID]!.isNotEmpty;
//
if (existSendingMessage) {
combinedMessageList = [
...sendingMessage[conversationID]!,
...responsedMessageList
];
combinedMessageList = [...sendingMessage[conversationID]!, ...responsedMessageList];
} else {
sendingMessage.remove(conversationID);
combinedMessageList = responsedMessageList;
}
}
if (res.code != 0) {
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: res.desc,
errorCode: res.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code));
}
if (responsedMessageList.isEmpty ||
(!PlatformUtils().isWeb && responsedMessageList.length < count) ||
(PlatformUtils().isWeb &&
responsedMessageList.length < min(count, 20))) {
if (responsedMessageList.isEmpty || (!PlatformUtils().isWeb && responsedMessageList.length < count) || (PlatformUtils().isWeb && responsedMessageList.length < min(count, 20))) {
haveMoreData = false;
} else {
haveMoreData = true;
}
return MessageListResponse(
haveMoreData: haveMoreData, data: combinedMessageList);
return MessageListResponse(haveMoreData: haveMoreData, data: combinedMessageList);
}
@override
Future<List<V2TimMessage>> getHistoryMessageList({
HistoryMsgGetTypeEnum getType =
HistoryMsgGetTypeEnum.V2TIM_GET_LOCAL_OLDER_MSG,
HistoryMsgGetTypeEnum getType = HistoryMsgGetTypeEnum.V2TIM_GET_LOCAL_OLDER_MSG,
String? userID,
String? groupID,
int lastMsgSeq = -1,
@ -87,30 +66,18 @@ class MessageServiceImpl extends MessageService {
String? lastMsgID,
List<int>? messageTypeList,
}) async {
final res = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.getHistoryMessageList(
count: count,
getType: getType,
userID: userID,
groupID: groupID,
lastMsgID: lastMsgID,
lastMsgSeq: lastMsgSeq,
messageTypeList: messageTypeList);
final res =
await TencentImSDKPlugin.v2TIMManager.getMessageManager().getHistoryMessageList(count: count, getType: getType, userID: userID, groupID: groupID, lastMsgID: lastMsgID, lastMsgSeq: lastMsgSeq, messageTypeList: messageTypeList);
final reponseMessageList = res.data ?? [];
if (res.code != 0) {
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: res.desc,
errorCode: res.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code));
}
return reponseMessageList;
}
@override
Future<V2TimMessageListResult?> getHistoryMessageListWithComplete({
HistoryMsgGetTypeEnum getType =
HistoryMsgGetTypeEnum.V2TIM_GET_LOCAL_OLDER_MSG,
HistoryMsgGetTypeEnum getType = HistoryMsgGetTypeEnum.V2TIM_GET_LOCAL_OLDER_MSG,
String? userID,
String? groupID,
int lastMsgSeq = -1,
@ -118,22 +85,11 @@ class MessageServiceImpl extends MessageService {
String? lastMsgID,
List<int>? messageTypeList,
}) async {
final res = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.getHistoryMessageListV2(
count: count,
getType: getType,
userID: userID,
groupID: groupID,
lastMsgID: lastMsgID,
lastMsgSeq: lastMsgSeq,
messageTypeList: messageTypeList);
final res =
await TencentImSDKPlugin.v2TIMManager.getMessageManager().getHistoryMessageListV2(count: count, getType: getType, userID: userID, groupID: groupID, lastMsgID: lastMsgID, lastMsgSeq: lastMsgSeq, messageTypeList: messageTypeList);
final responseMessageList = res.data;
if (res.code != 0) {
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: res.desc,
errorCode: res.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code));
}
return responseMessageList;
}
@ -142,45 +98,31 @@ class MessageServiceImpl extends MessageService {
Future addSimpleMsgListener({
required V2TimSimpleMsgListener listener,
}) async {
return TencentImSDKPlugin.v2TIMManager
.addSimpleMsgListener(listener: listener);
return TencentImSDKPlugin.v2TIMManager.addSimpleMsgListener(listener: listener);
}
@override
Future<void> removeSimpleMsgListener({V2TimSimpleMsgListener? listener}) {
return TencentImSDKPlugin.v2TIMManager
.removeSimpleMsgListener(listener: listener);
return TencentImSDKPlugin.v2TIMManager.removeSimpleMsgListener(listener: listener);
}
@override
Future<void> addAdvancedMsgListener({
required V2TimAdvancedMsgListener listener,
}) {
return TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.addAdvancedMsgListener(listener: listener);
return TencentImSDKPlugin.v2TIMManager.getMessageManager().addAdvancedMsgListener(listener: listener);
}
@override
Future<V2TimValueCallback<V2TimGroupMessageReadMemberList>>
getGroupMessageReadMemberList({
Future<V2TimValueCallback<V2TimGroupMessageReadMemberList>> getGroupMessageReadMemberList({
required String messageID,
required GetGroupMessageReadMemberListFilter filter,
int nextSeq = 0,
int count = 100,
}) async {
final result = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.getGroupMessageReadMemberList(
messageID: messageID,
filter: filter,
nextSeq: nextSeq,
count: count);
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().getGroupMessageReadMemberList(messageID: messageID, filter: filter, nextSeq: nextSeq, count: count);
if (result.code != 0) {
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: result.desc,
errorCode: result.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
}
return result;
}
@ -189,14 +131,9 @@ class MessageServiceImpl extends MessageService {
Future<V2TimValueCallback<List<V2TimMessageReceipt>>> getMessageReadReceipts({
required List<String> messageIDList,
}) async {
final result = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.getMessageReadReceipts(messageIDList: messageIDList);
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().getMessageReadReceipts(messageIDList: messageIDList);
if (result.code != 0) {
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: result.desc,
errorCode: result.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
}
return result;
}
@ -205,66 +142,43 @@ class MessageServiceImpl extends MessageService {
Future<V2TimCallback> sendMessageReadReceipts({
required List<String> messageIDList,
}) async {
final result = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.sendMessageReadReceipts(messageIDList: messageIDList);
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessageReadReceipts(messageIDList: messageIDList);
if (result.code != 0) {
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: result.desc,
errorCode: result.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
}
return result;
}
@override
Future<V2TimMsgCreateInfoResult?> createTextMessage(
{required String text}) async {
final res = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.createTextMessage(text: text);
Future<V2TimMsgCreateInfoResult?> createTextMessage({required String text}) async {
final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createTextMessage(text: text);
if (res.code == 0) {
final messageResult = res.data;
return messageResult;
}
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: res.desc,
errorCode: res.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code));
return null;
}
@override
Future<V2TimMsgCreateInfoResult?> createCustomMessage(
{required String data}) async {
final res = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.createCustomMessage(data: data);
Future<V2TimMsgCreateInfoResult?> createCustomMessage({required String data}) async {
final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createCustomMessage(data: data);
if (res.code == 0) {
final messageResult = res.data;
return messageResult;
}
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: res.desc,
errorCode: res.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code));
return null;
}
@override
Future<V2TimMsgCreateInfoResult?> createFaceMessage(
{required int index, required String data}) async {
final res = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.createFaceMessage(index: index, data: data);
Future<V2TimMsgCreateInfoResult?> createFaceMessage({required int index, required String data}) async {
final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createFaceMessage(index: index, data: data);
if (res.code == 0) {
final messageResult = res.data;
return messageResult;
}
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: res.desc,
errorCode: res.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code));
return null;
}
@ -272,51 +186,31 @@ class MessageServiceImpl extends MessageService {
Future<V2TimValueCallback<V2TimMessage>> reSendMessage(
{required String msgID, // ID
bool? onlineUserOnly}) async {
final res = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.reSendMessage(msgID: msgID, onlineUserOnly: onlineUserOnly ?? false);
final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().reSendMessage(msgID: msgID, onlineUserOnly: onlineUserOnly ?? false);
if (res.code != 0) {
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: res.desc,
errorCode: res.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code));
}
return res;
}
@override
Future<V2TimMsgCreateInfoResult?> createTextAtMessage(
{required String text, required List<String> atUserList}) async {
final res = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.createTextAtMessage(text: text, atUserList: atUserList);
Future<V2TimMsgCreateInfoResult?> createTextAtMessage({required String text, required List<String> atUserList}) async {
final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createTextAtMessage(text: text, atUserList: atUserList);
if (res.code == 0) {
final messageResult = res.data;
return messageResult;
}
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: res.desc,
errorCode: res.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code));
return null;
}
@override
Future<V2TimMsgCreateInfoResult?> createImageMessage(
{String? imageName, String? imagePath, dynamic inputElement}) async {
final res = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.createImageMessage(
imageName: imageName,
imagePath: imagePath ?? "",
inputElement: inputElement);
Future<V2TimMsgCreateInfoResult?> createImageMessage({String? imageName, String? imagePath, dynamic inputElement}) async {
final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createImageMessage(imageName: imageName, imagePath: imagePath ?? "", inputElement: inputElement);
if (res.code == 0) {
return res.data;
}
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: res.desc,
errorCode: res.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code));
return null;
}
@ -325,16 +219,11 @@ class MessageServiceImpl extends MessageService {
required String soundPath,
required int duration,
}) async {
final res = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.createSoundMessage(soundPath: soundPath, duration: duration);
final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createSoundMessage(soundPath: soundPath, duration: duration);
if (res.code == 0) {
return res.data;
}
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: res.desc,
errorCode: res.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code));
return null;
}
@ -351,23 +240,19 @@ class MessageServiceImpl extends MessageService {
String? cloudCustomData,
String? localCustomData,
}) async {
final result =
await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessage(
id: id,
receiver: receiver,
groupID: groupID,
priority: priority,
onlineUserOnly: onlineUserOnly,
offlinePushInfo: offlinePushInfo,
needReadReceipt: needReadReceipt,
localCustomData: localCustomData,
cloudCustomData: cloudCustomData,
);
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessage(
id: id,
receiver: receiver,
groupID: groupID,
priority: priority,
onlineUserOnly: onlineUserOnly,
offlinePushInfo: offlinePushInfo,
needReadReceipt: needReadReceipt,
localCustomData: localCustomData,
cloudCustomData: cloudCustomData,
);
if (result.code != 0) {
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: result.desc,
errorCode: result.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
}
return result;
}
@ -379,36 +264,22 @@ class MessageServiceImpl extends MessageService {
}) async {
V2TimCallback result;
if (kIsWeb) {
result = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.deleteMessages(
msgIDs: [], webMessageInstanceList: [webMessageInstance]);
result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().deleteMessages(msgIDs: [], webMessageInstanceList: [webMessageInstance]);
} else {
result = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.deleteMessageFromLocalStorage(msgID: msgID);
result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().deleteMessageFromLocalStorage(msgID: msgID);
}
if (result.code != 0) {
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: result.desc,
errorCode: result.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
}
return result;
}
@override
Future<V2TimCallback> revokeMessage(
{required String msgID, Object? webMessageInstance}) async {
final result = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.revokeMessage(msgID: msgID, webMessageInstatnce: webMessageInstance);
Future<V2TimCallback> revokeMessage({required String msgID, Object? webMessageInstance}) async {
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().revokeMessage(msgID: msgID, webMessageInstatnce: webMessageInstance);
if (result.code != 0) {
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: result.desc,
errorCode: result.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
}
return result;
}
@ -417,14 +288,9 @@ class MessageServiceImpl extends MessageService {
Future<V2TimCallback> clearC2CHistoryMessage({
required String userID,
}) async {
final result = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.clearC2CHistoryMessage(userID: userID);
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().clearC2CHistoryMessage(userID: userID);
if (result.code != 0) {
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: result.desc,
errorCode: result.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
}
return result;
}
@ -433,14 +299,9 @@ class MessageServiceImpl extends MessageService {
Future<V2TimCallback> clearGroupHistoryMessage({
required String groupID,
}) async {
final result = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.clearGroupHistoryMessage(groupID: groupID);
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().clearGroupHistoryMessage(groupID: groupID);
if (result.code != 0) {
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: result.desc,
errorCode: result.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
}
return result;
}
@ -449,14 +310,9 @@ class MessageServiceImpl extends MessageService {
Future<V2TimCallback> markC2CMessageAsRead({
required String userID,
}) async {
final result = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.markC2CMessageAsRead(userID: userID);
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().markC2CMessageAsRead(userID: userID);
if (result.code != 0) {
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: result.desc,
errorCode: result.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
}
return result;
}
@ -465,24 +321,16 @@ class MessageServiceImpl extends MessageService {
Future<V2TimCallback> markGroupMessageAsRead({
required String groupID,
}) async {
final result = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.markGroupMessageAsRead(groupID: groupID);
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().markGroupMessageAsRead(groupID: groupID);
if (result.code != 0) {
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: result.desc,
errorCode: result.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
}
return result;
}
@override
Future<void> removeAdvancedMsgListener(
{V2TimAdvancedMsgListener? listener}) async {
final result = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.removeAdvancedMsgListener(listener: listener);
Future<void> removeAdvancedMsgListener({V2TimAdvancedMsgListener? listener}) async {
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().removeAdvancedMsgListener(listener: listener);
return result;
}
@ -490,16 +338,11 @@ class MessageServiceImpl extends MessageService {
Future<List<V2TimMessage>?> downloadMergerMessage({
required String msgID,
}) async {
final res = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.downloadMergerMessage(msgID: msgID);
final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().downloadMergerMessage(msgID: msgID);
if (res.code == 0) {
return res.data;
}
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: res.desc,
errorCode: res.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code));
return null;
}
@ -507,16 +350,11 @@ class MessageServiceImpl extends MessageService {
Future<V2TimMsgCreateInfoResult?> createForwardMessage({
required String msgID,
}) async {
final res = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.createForwardMessage(msgID: msgID);
final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createForwardMessage(msgID: msgID);
if (res.code == 0) {
return res.data;
}
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: res.desc,
errorCode: res.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code));
return null;
}
@ -527,62 +365,30 @@ class MessageServiceImpl extends MessageService {
required List<String> abstractList,
required String compatibleText,
}) async {
final res = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.createMergerMessage(
msgIDList: msgIDList,
title: title,
abstractList: abstractList,
compatibleText: compatibleText);
final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createMergerMessage(msgIDList: msgIDList, title: title, abstractList: abstractList, compatibleText: compatibleText);
if (res.code == 0) {
return res.data;
}
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: res.desc,
errorCode: res.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code));
return null;
}
@override
Future<V2TimCallback> deleteMessages(
{required List<String> msgIDs,
List<dynamic>? webMessageInstanceList}) async {
final result = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.deleteMessages(
msgIDs: msgIDs, webMessageInstanceList: webMessageInstanceList);
Future<V2TimCallback> deleteMessages({required List<String> msgIDs, List<dynamic>? webMessageInstanceList}) async {
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().deleteMessages(msgIDs: msgIDs, webMessageInstanceList: webMessageInstanceList);
if (result.code != 0) {
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: result.desc,
errorCode: result.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
}
return result;
}
@override
Future<V2TimMsgCreateInfoResult?> createVideoMessage(
{String? videoPath,
String? type,
int? duration,
String? snapshotPath,
dynamic inputElement}) async {
final res = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.createVideoMessage(
videoFilePath: videoPath ?? "",
type: type ?? "",
duration: duration ?? 1,
snapshotPath: snapshotPath ?? "",
inputElement: inputElement);
Future<V2TimMsgCreateInfoResult?> createVideoMessage({String? videoPath, String? type, int? duration, String? snapshotPath, dynamic inputElement}) async {
final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createVideoMessage(videoFilePath: videoPath ?? "", type: type ?? "", duration: duration ?? 1, snapshotPath: snapshotPath ?? "", inputElement: inputElement);
if (res.code == 0) {
return res.data;
}
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: res.desc,
errorCode: res.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code));
return null;
}
@ -595,75 +401,38 @@ class MessageServiceImpl extends MessageService {
bool needReadReceipt = false,
required V2TimMessage replyMessage, //
}) async {
final result = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.sendReplyMessage(
id: id,
receiver: receiver,
offlinePushInfo: offlinePushInfo,
groupID: groupID,
needReadReceipt: needReadReceipt,
replyMessage: replyMessage);
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendReplyMessage(id: id, receiver: receiver, offlinePushInfo: offlinePushInfo, groupID: groupID, needReadReceipt: needReadReceipt, replyMessage: replyMessage);
if (result.code != 0) {
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: result.desc,
errorCode: result.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
}
return result;
}
@override
Future<V2TimMsgCreateInfoResult?> createFileMessage(
{String? filePath,
required String fileName,
dynamic inputElement}) async {
final res = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.createFileMessage(
filePath: filePath ?? "",
fileName: fileName,
inputElement: inputElement);
Future<V2TimMsgCreateInfoResult?> createFileMessage({String? filePath, required String fileName, dynamic inputElement}) async {
final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createFileMessage(filePath: filePath ?? "", fileName: fileName, inputElement: inputElement);
if (res.code == 0) {
return res.data;
}
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: res.desc,
errorCode: res.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code));
return null;
}
@override
Future<V2TimMsgCreateInfoResult?> createLocationMessage(
{required String desc,
required double longitude,
required double latitude}) async {
final res = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.createLocationMessage(
desc: desc, longitude: longitude, latitude: latitude);
Future<V2TimMsgCreateInfoResult?> createLocationMessage({required String desc, required double longitude, required double latitude}) async {
final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createLocationMessage(desc: desc, longitude: longitude, latitude: latitude);
if (res.code == 0) {
return res.data;
}
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: res.desc,
errorCode: res.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code));
return null;
}
@override
Future<V2TimValueCallback<V2TimMessageSearchResult>> searchLocalMessages(
{required V2TimMessageSearchParam searchParam}) async {
final result = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.searchLocalMessages(searchParam: searchParam);
Future<V2TimValueCallback<V2TimMessageSearchResult>> searchLocalMessages({required V2TimMessageSearchParam searchParam}) async {
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().searchLocalMessages(searchParam: searchParam);
if (result.code != 0) {
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: result.desc,
errorCode: result.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
}
return result;
}
@ -672,30 +441,19 @@ class MessageServiceImpl extends MessageService {
Future<List<V2TimMessage>?> findMessages({
required List<String> messageIDList,
}) async {
final res = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.findMessages(messageIDList: messageIDList);
final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().findMessages(messageIDList: messageIDList);
if (res.code == 0) {
return res.data;
}
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: res.desc,
errorCode: res.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code));
return null;
}
@override
Future<V2TimCallback> setLocalCustomInt(
{required String msgID, required int localCustomInt}) async {
final result = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.setLocalCustomInt(msgID: msgID, localCustomInt: localCustomInt);
Future<V2TimCallback> setLocalCustomInt({required String msgID, required int localCustomInt}) async {
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().setLocalCustomInt(msgID: msgID, localCustomInt: localCustomInt);
if (result.code != 0) {
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: result.desc,
errorCode: result.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
}
return result;
}
@ -705,14 +463,9 @@ class MessageServiceImpl extends MessageService {
required List<String> userIDList,
required ReceiveMsgOptEnum opt,
}) async {
final result = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.setC2CReceiveMessageOpt(userIDList: userIDList, opt: opt);
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().setC2CReceiveMessageOpt(userIDList: userIDList, opt: opt);
if (result.code != 0) {
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: result.desc,
errorCode: result.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
}
return result;
}
@ -722,96 +475,55 @@ class MessageServiceImpl extends MessageService {
required String groupID,
required ReceiveMsgOptEnum opt,
}) async {
final result = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.setGroupReceiveMessageOpt(groupID: groupID, opt: opt);
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().setGroupReceiveMessageOpt(groupID: groupID, opt: opt);
if (result.code != 0) {
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: result.desc,
errorCode: result.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
}
return result;
}
@override
Future<V2TimValueCallback<V2TimMessageChangeInfo>> modifyMessage(
{required V2TimMessage message}) async {
final result = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.modifyMessage(message: message);
Future<V2TimValueCallback<V2TimMessageChangeInfo>> modifyMessage({required V2TimMessage message}) async {
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().modifyMessage(message: message);
if (result.code != 0) {
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: result.desc,
errorCode: result.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
}
return result;
}
@override
Future<V2TimCallback> setLocalCustomData(
{required String msgID, required String localCustomData}) async {
final result = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.setLocalCustomData(msgID: msgID, localCustomData: localCustomData);
Future<V2TimCallback> setLocalCustomData({required String msgID, required String localCustomData}) async {
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().setLocalCustomData(msgID: msgID, localCustomData: localCustomData);
if (result.code != 0) {
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: result.desc,
errorCode: result.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
}
return result;
}
@override
Future<V2TimValueCallback<V2TimMessageOnlineUrl>> getMessageOnlineUrl(
{required String msgID}) async {
final result = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.getMessageOnlineUrl(msgID: msgID);
Future<V2TimValueCallback<V2TimMessageOnlineUrl>> getMessageOnlineUrl({required String msgID}) async {
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().getMessageOnlineUrl(msgID: msgID);
if (result.code != 0) {
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: result.desc,
errorCode: result.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
}
return result;
}
@override
Future<V2TimCallback> downloadMessage(
{required String msgID,
required int messageType,
required int imageType,
required bool isSnapshot}) async {
final result = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.downloadMessage(
msgID: msgID,
messageType: messageType,
imageType: imageType,
isSnapshot: isSnapshot);
Future<V2TimCallback> downloadMessage({required String msgID, required int messageType, required int imageType, required bool isSnapshot}) async {
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().downloadMessage(msgID: msgID, messageType: messageType, imageType: imageType, isSnapshot: isSnapshot);
if (result.code != 0) {
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: result.desc,
errorCode: result.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
}
return result;
}
@override
Future<String> translateText(String text, String target) async {
final result = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.translateText(texts: [text], targetLanguage: target);
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().translateText(texts: [text], targetLanguage: target);
if (result.code != 0) {
_coreService.callOnCallback(TIMCallback(
type: TIMCallbackType.API_ERROR,
errorMsg: result.desc,
errorCode: result.code));
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
}
return result.data?[text] ?? "";
}

View File

@ -1,4 +1,5 @@
import 'dart:async';
// import 'package:audioplayers/audioplayers.dart';
import 'package:flutter_plugin_record_plus/const/play_state.dart';
import 'package:flutter_plugin_record_plus/const/response.dart';
@ -14,14 +15,14 @@ class SoundPlayer {
final ImportProxy importProxy = ImportProxy();
static final FlutterPluginRecord _recorder = FlutterPluginRecord();
static SoundInterruptListener? _soundInterruptListener;
static bool isInited = false;
static bool isInit = false;
static final AudioPlayer _audioPlayer = AudioPlayer();
static initSoundPlayer() {
if (!isInited) {
if (!isInit) {
_recorder.init();
// AudioPlayer.global.setGlobalAudioContext(const AudioContext());
isInited = true;
isInit = true;
}
}
@ -43,10 +44,7 @@ class SoundPlayer {
_recorder.dispose();
}
static StreamSubscription<PlayerState> playStateListener(
{required void Function(PlayerState)? listener}) =>
_audioPlayer.playerStateStream.listen(listener);
static StreamSubscription<PlayerState> playStateListener({required void Function(PlayerState)? listener}) => _audioPlayer.playerStateStream.listen(listener);
static setSoundInterruptListener(SoundInterruptListener listener) {
_soundInterruptListener = listener;
@ -56,13 +54,9 @@ class SoundPlayer {
_soundInterruptListener = null;
}
static StreamSubscription<RecordResponse> responseListener(
ResponseListener listener) =>
_recorder.response.listen(listener);
static StreamSubscription<RecordResponse> responseListener(ResponseListener listener) => _recorder.response.listen(listener);
static StreamSubscription<RecordResponse> responseFromAmplitudeListener(
ResponseListener listener) =>
_recorder.responseFromAmplitude.listen(listener);
static StreamSubscription<RecordResponse> responseFromAmplitudeListener(ResponseListener listener) => _recorder.responseFromAmplitude.listen(listener);
static startRecord() {
_recorder.start();

View File

@ -12,38 +12,19 @@ class TimeAgo {
}
List<String> weekdayMap() {
return [
'',
TIM_t("星期一"),
TIM_t("星期二"),
TIM_t("星期三"),
TIM_t("星期四"),
TIM_t("星期五"),
TIM_t("星期六"),
TIM_t("星期天")
];
return ['', TIM_t("星期一"), TIM_t("星期二"), TIM_t("星期三"), TIM_t("星期四"), TIM_t("星期五"), TIM_t("星期六"), TIM_t("星期天")];
}
String getYearMonthDate(DateTime dateTime) {
String month = dateTime.month.toString();
String date = dateTime.day.toString();
return dateTime.year.toString() +
'/' +
(month.length == 1 ? '0' : '') +
month +
'/' +
(date.length == 1 ? '0' : '') +
date;
return dateTime.year.toString() + '/' + (month.length == 1 ? '0' : '') + month + '/' + (date.length == 1 ? '0' : '') + date;
}
String getMonthDate(DateTime dateTime) {
String month = dateTime.month.toString();
String date = dateTime.day.toString();
return (month.length == 1 ? '0' : '') +
month +
'/' +
(date.length == 1 ? '0' : '') +
date;
return (month.length == 1 ? '0' : '') + month + '/' + (date.length == 1 ? '0' : '') + date;
}
String? getTimeStringForChat(int timeStamp) {
@ -55,14 +36,7 @@ class TimeAgo {
}
final Duration duration = DateTime.now().difference(date);
final int diffDays = duration.inDays +
(duration.inMinutes >
DateTime.now()
.difference(DateTime(DateTime.now().year,
DateTime.now().month, DateTime.now().day))
.inMinutes
? 1
: 0);
final int diffDays = duration.inDays + (duration.inMinutes > DateTime.now().difference(DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day)).inMinutes ? 1 : 0);
final int diffMinutes = duration.inMinutes;
var res;
@ -87,8 +61,7 @@ class TimeAgo {
final String option2 = diffMinutes.toString();
res = TIM_t_para("{{option2}} 分钟前", "$option2 分钟前")(option2: option2);
} else {
res =
"${date.hour}:${date.minute < 10 ? date.minute.toString() + "0" : date.minute}";
res = "${date.hour}:${date.minute < 10 ? "0" + date.minute.toString() : date.minute}";
// res = "$prefix $timeStr";
}
} else {
@ -104,8 +77,7 @@ class TimeAgo {
nowTime = DateTime(nowTime.year, nowTime.month, nowTime.day);
var ftime = DateTime.fromMillisecondsSinceEpoch(timeStamp * 1000);
// var preFix = ftime.hour >= 12 ? TIM_t("下午") : TIM_t("上午");
final timeStr =
DateFormat('HH:mm').format(ftime); // Use 'HH:mm' for 24-hour format
final timeStr = DateFormat('HH:mm').format(ftime); // Use 'HH:mm' for 24-hour format
// + (24)
if (nowTime.year != ftime.year) {
return '${DateFormat('yyyy-MM-dd').format(ftime)} $timeStr';

View File

@ -10,13 +10,13 @@ import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_state.dart';
import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_statelesswidget.dart';
import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_chat_separate_view_model.dart';
import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_chat_global_model.dart';
import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart';
import 'package:tencent_cloud_chat_uikit/ui/utils/logger.dart';
// ignore: unused_import
import 'package:tencent_cloud_chat_uikit/ui/utils/optimize_utils.dart';
import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitChat/TIMUIKItMessageList/tim_uikit_chat_history_message_list_config.dart';
import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitChat/TIMUIKItMessageList/utils.dart';
import 'package:tencent_cloud_chat_uikit/ui/widgets/keepalive_wrapper.dart';
import 'package:tencent_im_base/tencent_im_base.dart';
import 'TIMUIKitTongue/tim_uikit_chat_history_message_list_tongue.dart';
import 'TIMUIKitTongue/tim_uikit_chat_history_message_list_tongue_container.dart';
@ -406,7 +406,12 @@ class _TIMUIKitHistoryMessageListState extends TIMUIKitState<TIMUIKitHistoryMess
final messageItem = readMessageList[index];
if (index == readMessageList.length - 1) {
if (haveMoreData) {
throttleFunction(index, LoadDirection.previous);
final lastMessage = globalModel.messageListMap[TencentUtils.checkString(widget.conversation.groupID) ?? widget.conversation.userID ?? widget.conversation.conversationID]?.last;
if(lastMessage != null){
throttleFunctionWithMsgID(lastMessage.msgID ?? "", LoadDirection.previous);
}else{
throttleFunction(index, messageList);
}
return Column(
children: [
LoadingAnimationWidget.staggeredDotsWave(

View File

@ -1,6 +1,6 @@
import 'dart:async';
import 'dart:math';
// import 'package:audioplayers/audioplayers.dart';
import 'package:flutter/material.dart';
import 'package:just_audio/just_audio.dart';
@ -12,8 +12,9 @@ import 'package:tencent_cloud_chat_uikit/data_services/message/message_services.
import 'package:tencent_cloud_chat_uikit/data_services/services_locatar.dart';
import 'package:tencent_cloud_chat_uikit/ui/constants/history_message_constant.dart';
import 'package:tencent_cloud_chat_uikit/ui/utils/platform.dart';
import 'package:tencent_im_base/tencent_im_base.dart';
import 'package:tencent_cloud_chat_uikit/ui/utils/sound_record.dart';
import 'package:tencent_im_base/tencent_im_base.dart';
import 'TIMUIKitMessageReaction/tim_uikit_message_reaction_show_panel.dart';
class TIMUIKitSoundElem extends StatefulWidget {
@ -63,13 +64,11 @@ class _TIMUIKitSoundElemState extends TIMUIKitState<TIMUIKitSoundElem> {
late V2TimSoundElem stateElement = widget.message.soundElem!;
_playSound() async {
if (!SoundPlayer.isInited) {
if (!SoundPlayer.isInit) {
SoundPlayer.initSoundPlayer();
}
if (widget.localCustomInt == null ||
widget.localCustomInt != HistoryMessageDartConstant.read) {
globalModel.setLocalCustomInt(widget.msgID,
HistoryMessageDartConstant.read, widget.chatModel.conversationID);
if (widget.localCustomInt == null || widget.localCustomInt != HistoryMessageDartConstant.read) {
globalModel.setLocalCustomInt(widget.msgID, HistoryMessageDartConstant.read, widget.chatModel.conversationID);
}
if (isPlaying) {
SoundPlayer.stop();
@ -82,11 +81,9 @@ class _TIMUIKitSoundElemState extends TIMUIKitState<TIMUIKitSoundElem> {
downloadMessageDetailAndSave() async {
if (widget.message.msgID != null && widget.message.msgID != '') {
if (widget.message.soundElem!.url == null ||
widget.message.soundElem!.url == '') {
final response = await _messageService.getMessageOnlineUrl(
msgID: widget.message.msgID!);
if(response.data != null){
if (widget.message.soundElem!.url == null || widget.message.soundElem!.url == '') {
final response = await _messageService.getMessageOnlineUrl(msgID: widget.message.msgID!);
if (response.data != null) {
widget.message.soundElem = response.data!.soundElem;
Future.delayed(const Duration(microseconds: 10), () {
setState(() => stateElement = response.data!.soundElem!);
@ -94,13 +91,8 @@ class _TIMUIKitSoundElemState extends TIMUIKitState<TIMUIKitSoundElem> {
}
}
if (!PlatformUtils().isWeb) {
if (widget.message.soundElem!.localUrl == null ||
widget.message.soundElem!.localUrl == '') {
_messageService.downloadMessage(
msgID: widget.message.msgID!,
messageType: 4,
imageType: 0,
isSnapshot: false);
if (widget.message.soundElem!.localUrl == null || widget.message.soundElem!.localUrl == '') {
_messageService.downloadMessage(msgID: widget.message.msgID!, messageType: 4, imageType: 0, isSnapshot: false);
}
}
}
@ -110,8 +102,7 @@ class _TIMUIKitSoundElemState extends TIMUIKitState<TIMUIKitSoundElem> {
void didUpdateWidget(oldWidget) {
super.didUpdateWidget(oldWidget);
setState(() {
isPlaying = widget.chatModel.currentPlayedMsgId != '' &&
widget.chatModel.currentPlayedMsgId == widget.msgID;
isPlaying = widget.chatModel.currentPlayedMsgId != '' && widget.chatModel.currentPlayedMsgId == widget.msgID;
});
}
@ -119,9 +110,8 @@ class _TIMUIKitSoundElemState extends TIMUIKitState<TIMUIKitSoundElem> {
void initState() {
super.initState();
subscription =
SoundPlayer.playStateListener(listener: (PlayerState state) {
if(state.processingState == ProcessingState.completed){
subscription = SoundPlayer.playStateListener(listener: (PlayerState state) {
if (state.processingState == ProcessingState.completed) {
widget.chatModel.currentPlayedMsgId = "";
}
});
@ -157,8 +147,7 @@ class _TIMUIKitSoundElemState extends TIMUIKitState<TIMUIKitSoundElem> {
}
_showJumpColor() {
if ((widget.chatModel.jumpMsgID != widget.message.msgID) &&
(widget.message.msgID?.isNotEmpty ?? true)) {
if ((widget.chatModel.jumpMsgID != widget.message.msgID) && (widget.message.msgID?.isNotEmpty ?? true)) {
return;
}
isShining = true;
@ -185,30 +174,18 @@ class _TIMUIKitSoundElemState extends TIMUIKitState<TIMUIKitSoundElem> {
Widget tuiBuild(BuildContext context, TUIKitBuildValue value) {
final theme = value.theme;
final backgroundColor = widget.isFromSelf
? (theme.chatMessageItemFromSelfBgColor ??
theme.lightPrimaryMaterialColor.shade50)
: (theme.chatMessageItemFromOthersBgColor);
final backgroundColor = widget.isFromSelf ? (theme.chatMessageItemFromSelfBgColor ?? theme.lightPrimaryMaterialColor.shade50) : (theme.chatMessageItemFromOthersBgColor);
final borderRadius = widget.isFromSelf
? const BorderRadius.only(
topLeft: Radius.circular(10),
topRight: Radius.circular(2),
bottomLeft: Radius.circular(10),
bottomRight: Radius.circular(10))
: const BorderRadius.only(
topLeft: Radius.circular(2),
topRight: Radius.circular(10),
bottomLeft: Radius.circular(10),
bottomRight: Radius.circular(10));
? const BorderRadius.only(topLeft: Radius.circular(10), topRight: Radius.circular(2), bottomLeft: Radius.circular(10), bottomRight: Radius.circular(10))
: const BorderRadius.only(topLeft: Radius.circular(2), topRight: Radius.circular(10), bottomLeft: Radius.circular(10), bottomRight: Radius.circular(10));
if (widget.isShowJump) {
if (!isShining) {
Future.delayed(Duration.zero, () {
_showJumpColor();
});
} else {
if ((widget.chatModel.jumpMsgID == widget.message.msgID) &&
(widget.message.msgID?.isNotEmpty ?? false)) {
if ((widget.chatModel.jumpMsgID == widget.message.msgID) && (widget.message.msgID?.isNotEmpty ?? false)) {
widget.clearJump!();
}
}
@ -218,9 +195,7 @@ class _TIMUIKitSoundElemState extends TIMUIKitState<TIMUIKitSoundElem> {
child: Container(
padding: widget.textPadding ?? const EdgeInsets.all(10),
decoration: BoxDecoration(
color: isShowJumpState
? const Color.fromRGBO(245, 166, 35, 1)
: (widget.backgroundColor ?? backgroundColor),
color: isShowJumpState ? const Color.fromRGBO(245, 166, 35, 1) : (widget.backgroundColor ?? backgroundColor),
borderRadius: widget.borderRadius ?? borderRadius,
),
constraints: const BoxConstraints(maxWidth: 240),

View File

@ -133,26 +133,26 @@ packages:
dependency: "direct main"
description:
name: cached_network_image
sha256: fd3d0dc1d451f9a252b32d95d3f0c3c487bc41a75eba2e6097cb0b9c71491b15
sha256: f98972704692ba679db144261172a8e20feb145636c617af0eb4022132a6797f
url: "https://pub.dev"
source: hosted
version: "3.2.3"
version: "3.3.0"
cached_network_image_platform_interface:
dependency: transitive
description:
name: cached_network_image_platform_interface
sha256: bb2b8403b4ccdc60ef5f25c70dead1f3d32d24b9d6117cfc087f496b178594a7
sha256: "56aa42a7a01e3c9db8456d9f3f999931f1e05535b5a424271e9a38cabf066613"
url: "https://pub.dev"
source: hosted
version: "2.0.0"
version: "3.0.0"
cached_network_image_web:
dependency: transitive
description:
name: cached_network_image_web
sha256: b8eb814ebfcb4dea049680f8c1ffb2df399e4d03bf7a352c775e26fa06e02fa0
sha256: "759b9a9f8f6ccbb66c185df805fac107f05730b1dab9c64626d1008cca532257"
url: "https://pub.dev"
source: hosted
version: "1.0.2"
version: "1.1.0"
camera:
dependency: transitive
description:
@ -301,10 +301,10 @@ packages:
dependency: transitive
description:
name: dart_internal
sha256: dae3976f383beddcfcd07ad5291a422df2c8c0a8a03c52cda63ac7b4f26e0f4e
sha256: "689dccc3d5f62affd339534cca548dce12b3a6b32f0f10861569d3025efc0567"
url: "https://pub.dev"
source: hosted
version: "0.2.8"
version: "0.2.9"
dart_style:
dependency: transitive
description:
@ -317,10 +317,10 @@ packages:
dependency: "direct main"
description:
name: desktop_drop
sha256: "4ca4d960f4b11c032e9adfd2a0a8ac615bc3fddb4cbe73dcf840dd8077582186"
sha256: d55a010fe46c8e8fcff4ea4b451a9ff84a162217bdb3b2a0aa1479776205e15d
url: "https://pub.dev"
source: hosted
version: "0.4.1"
version: "0.4.4"
device_info_plus:
dependency: "direct main"
description:
@ -478,14 +478,6 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
flutter_blurhash:
dependency: transitive
description:
name: flutter_blurhash
sha256: "05001537bd3fac7644fa6558b09ec8c0a3f2eba78c0765f88912882b1331a5c6"
url: "https://pub.dev"
source: hosted
version: "0.7.0"
flutter_cache_manager:
dependency: transitive
description:
@ -871,10 +863,10 @@ packages:
dependency: transitive
description:
name: octo_image
sha256: "107f3ed1330006a3bea63615e81cf637433f5135a52466c7caa0e7152bca9143"
sha256: "45b40f99622f11901238e18d48f5f12ea36426d8eced9f4cbf58479c7aa2430d"
url: "https://pub.dev"
source: hosted
version: "1.0.2"
version: "2.0.0"
open_file:
dependency: "direct main"
description:
@ -1284,34 +1276,34 @@ packages:
dependency: transitive
description:
name: tencent_cloud_chat_sdk
sha256: "013f8c9d96bbeed06d5fe971b7802d8ddf830c776332d6c6de6ccb9de8956d83"
sha256: "7dbb354209eca61f2c816c8ba7c1b1282dd5fb7e090135186bde56c89d976110"
url: "https://pub.dev"
source: hosted
version: "5.1.8"
version: "6.0.2"
tencent_cloud_uikit_core:
dependency: "direct main"
description:
name: tencent_cloud_uikit_core
sha256: acb3bae877428457318b8c5604a6c263957b6df3454ed3e30e8b6f620c6b2cd9
sha256: "5624654c52a230111cbcfcaa648b9c6e3ee877018f16bc5eec076b639655a191"
url: "https://pub.dev"
source: hosted
version: "1.1.0"
version: "1.2.1"
tencent_im_base:
dependency: "direct main"
description:
name: tencent_im_base
sha256: bc5eb080090038d21c879480c06d3ed7cb4b1dcc2cbe894189613eadf08cf7c5
sha256: "52a99ef1c9dbd219530cf6f96a9891ab316f789b9b2c11634e0002d0a0f0f63c"
url: "https://pub.dev"
source: hosted
version: "3.0.1"
version: "3.1.0"
tencent_im_sdk_plugin_platform_interface:
dependency: transitive
description:
name: tencent_im_sdk_plugin_platform_interface
sha256: "1f9814d654dc1ad0a4cb62936f0849defac058c3bdca471472efc8b64b63cc5e"
sha256: "3b39f19fcc2306c7cbdabe79e532bbb7feade695630f5373308a52703ece482c"
url: "https://pub.dev"
source: hosted
version: "0.3.22"
version: "1.0.0"
tencent_keyboard_visibility:
dependency: "direct main"
description:
@ -1641,5 +1633,5 @@ packages:
source: hosted
version: "3.1.2"
sdks:
dart: ">=3.1.0-185.0.dev <3.2.0"
dart: ">=3.1.0-185.0.dev <3.3.0"
flutter: ">=3.13.0"

View File

@ -1,6 +1,6 @@
name: tencent_cloud_chat_uikit
description: A powerful chat UI component library and business logic for Tencent Cloud Chat, creating seamless in-app chat modules for delightful user experiences.
version: 2.3.2
version: 2.3.3
homepage: https://trtc.io/products/chat?utm_source=gfs&utm_medium=link&utm_campaign=%E6%B8%A0%E9%81%93&_channel_track_key=k6WgfCKn
repository: https://github.com/TencentCloud/chat-uikit-flutter
documentation: https://comm.qq.com/im/doc/flutter/en/TUIKit/readme.html
@ -38,7 +38,7 @@ dependencies:
transparent_image: ^2.0.0
image_gallery_saver: ^2.0.1
path_provider: ^2.0.8
cached_network_image: ^3.2.0
cached_network_image: ^3.3.0
shared_preferences: ^2.0.13
scroll_to_index: ^2.1.1
wechat_assets_picker: ^8.5.0
@ -63,12 +63,12 @@ dependencies:
open_file: ^3.3.2
tencent_keyboard_visibility: ^1.0.1
tim_ui_kit_sticker_plugin: ^3.0.1+1
tencent_im_base: ^3.0.1
tencent_im_base: ^3.1.0
fc_native_video_thumbnail: any
path: ^1.8.1
tencent_cloud_uikit_core: ^1.1.0
tencent_cloud_uikit_core: ^1.2.1
pasteboard: ^0.2.0
desktop_drop: ^0.4.1
desktop_drop: ^0.4.4
device_info_plus: any
cross_file: ^0.3.3+4
csslib: 0.17.2