feat: Upgrade to 2.3.3
This commit is contained in:
parent
038a3d483d
commit
9c11e66fd5
10
CHANGELOG.md
10
CHANGELOG.md
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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] ?? "";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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';
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
50
pubspec.lock
50
pubspec.lock
|
|
@ -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"
|
||||
|
|
|
|||
10
pubspec.yaml
10
pubspec.yaml
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue